C# WPF 数据网格无法添加新行问题(将 XML 加载为数据集)



很抱歉这个简单的问题,但我不明白为什么我不能单独解决它...... 我尝试了许多不同的方式,绑定...但总是大认为我需要的东西不是一起去...... 现在有了该代码,我的主题将获得 90% 的折扣

*将项目从XML文件加载到数据网格

*改变思维

*保存项目

*通过选择行 - 将项目放到 txtbox + 画布中的创建按钮

*循环抛出所有行

只是为了在数据网格中添加一些项目而不将其直接写入 XML 文件是不会喷射的......

这就是现在我的代码:

XML文件:

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
<Data Id="1" Name="aaa" Height="25" Width="25" PosTop="25" PosLeft="25" Execute="MsPaint" Image="/Images/Timer_Clock.png" />
<Data Id="2" Name="bbb" Height="25" Width="25" PosTop="100" PosLeft="25" Execute="MsPaint" Image="/Images/Timer_Clock.png" />
<Data Id="3" Name="ccc" Height="44" Width="44" PosTop="25" PosLeft="200" Execute="MsPaint" Image="/Images/Timer_Clock.png" />
<Data Id="4" Name="Se" Height="25" Width="25" PosTop="100" PosLeft="200" Execute="MsPaint" Image="/Images/Timer_Clock.png" />
<Data Id="5" Name="aa54a" Height="25" Width="25" PosTop="50" PosLeft="25" Execute="MsPaint" Image="/Images/Fragezeichen.png" />
<Data Id="6" Name="b54bb" Height="55" Width="55" PosTop="135" PosLeft="25" Execute="MsPaint" Image="/Images/Fragezeichen.png" />
<Data Id="7" Name="csscc" Height="25" Width="25" PosTop="200" PosLeft="200" Execute="MsPaint" Image="/Images/Fragezeichen.png" />
<Data Id="8" Name="Sh54e" Height="25" Width="25" PosTop="225" PosLeft="200" Execute="MsPaint" Image="/Images/Fragezeichen.png" />
<Data Id="9" Name="aggaa" Height="55" Width="55" PosTop="25" PosLeft="300" Execute="MsPaint" Image="/Images/Picture.png" />
<Data Id="10" Name="b45bffb" Height="25" Width="25" PosTop="100" PosLeft="325" Execute="MsPaint" Image="/Images/Picture.png" />
<Data Id="11" Name="ccdc" Height="25" Width="25" PosTop="25" PosLeft="350" Execute="MsPaint" Image="/Images/Picture.png" />
<Data Id="12" Name="S45fe" Height="55" Width="55" PosTop="100" PosLeft="300" Execute="MsPaint" Image="/Images/Picture.png" />
</DocumentElement>

xaml:(我也用直接创建的 Colums 写了它,但我的加载 xml不明白这一点(

<DataGrid x:Name="datagrid1"   SelectionChanged="datagrid1_SelectionChanged" Background="LightGray" RowBackground="LightYellow" AlternatingRowBackground="LightBlue" AutoGenerateColumns="True" CanUserAddRows="True"  HorizontalAlignment="Left"  Height="125" Margin="137,56,0,0" VerticalAlignment="Top" Width="569">
</DataGrid>

XAML.cs:

private void load(object sender, RoutedEventArgs e)
{
string load_xmlfileName = (txtbx_load_Name.Text + ".xml");
try
{
DataSet dataSet = new DataSet("Data");
dataSet.ReadXml(load_xmlfileName);
datagrid1.ItemsSource = dataSet.Tables[0].DefaultView;
}
catch (Exception ex) 
{
System.Windows.MessageBox.Show("Error =" + (ex));
}
}
private void save(object sender, RoutedEventArgs e)
{
string save_xmlfileName = (txtbx_save_Name.Text + ".xml");
try
{
DataTable dt = new DataTable("Data");
dt = ((DataView)datagrid1.ItemsSource).ToTable();  //DataView
string XmlFile = (save_xmlfileName);
dt.WriteXml(XmlFile);
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Error =" + (ex));
}
}
private void del_all_in_DatagridList(object sender, RoutedEventArgs e)
{
try { 
datagrid1.ItemsSource = null;
//datagrid1.Columns.Clear();
//datagrid1.Items.Clear();
datagrid1.Items.Refresh();
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Error =" + (ex));
}
private void loop(object sender, RoutedEventArgs e)
{
try
{
foreach (System.Data.DataRowView dr in datagrid1.ItemsSource)
{
//MessageBox.Show(dr[0].ToString());
txtbx_outbox_Id.Text = (dr[0].ToString());
txtbx_outbox_Name.Text = (dr[1].ToString());
txtbx_outbox_Height.Text = (dr[2].ToString());
txtbx_outbox_Width.Text = (dr[3].ToString());
txtbx_outbox_PosTop.Text = (dr[4].ToString());
txtbx_outbox_PosLeft.Text = (dr[5].ToString());
txtbx_outbox_Execute.Text = (dr[6].ToString());
txtbx_outbox_Image.Text = (dr[7].ToString());
//Thread.Sleep(500); //o,5 Sec
//-------------springe zu *Logging_Sys_Start*----------------------
string Sender = "";
Create_Button_Click(Sender, new RoutedEventArgs());
//---------------------------------------------------------------------
}
}
catch (Exception ex)
{
MessageBox.Show("loop Error-Handling =rn" + ex.Message);
}
}
// *************** now the Problem Codes *******************************************************
// **********************************************************************************************
private void New_Datagrid_Row_v1(object sender, RoutedEventArgs e)
{
try
{
DataTable table1 = new DataTable("Data");
//table1.Columns.Add("id");
//table1.Columns.Add("Name");
//table1.Columns.Add("Age");
//table1.Rows.Add(1, "Jack", 18);
table1.Rows.Add(2, "Tim", 18);
// this.datagrid1.ItemsSource = table1;

DataSet set = new DataSet("Data");
set.Tables.Add(table1);
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Error =" + (ex));
// *****************  * error array longer as the table colums* *************
}      
}
private void New_Datagrid_Row_v2(object sender, RoutedEventArgs e)
{
try
{
DataTable table = new DataTable("Data");
table.Columns.Add("Id", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Columns.Add("HeightWidt", typeof(int));
table.Columns.Add("PosTop", typeof(int));
table.Columns.Add("PosLeft", typeof(int));
table.Columns.Add("Execute", typeof(string));
table.Columns.Add("Image", typeof(string));
table.Rows.Add(25, "Indocin", 24, 100, 35, "Notepad", "Images / Timer_Clock.png");
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Error =" + (ex));
// ***********  *no error - do nothing* ****************
}
}
private void New_Datagrid_Row_v3(object sender, RoutedEventArgs e)
{
try
{
string Id = "7";
string Name = "HeyHo";
string Height = "22";
string Width = "22";
string PosTop = "44";
string PosLeft = "44";
string Execute = "Explorer";
string Image = "/Images/Picture.png";
DataTable dft = new DataTable();
// DataColumn column;
DataRow row;
DataView view;

row = dft.NewRow();
row["Id"] = Id;
row["Name"] = Name;
row["Height"] = Height;
row["Width"] = Width;
row["PosTop"] = PosTop;
row["PosLeft"] = PosLeft;
row["Execute"] = Execute;
row["Image"] = Image;
dft.Rows.Add(row);

view = new DataView(dft);
datagrid1.ItemsSource = view;
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Error =rn" + ex.Message);
// **********************  *error Colum "ID" iss not in the table *  ********
}

}
private void New_Datagrid_Row_v4(object sender, RoutedEventArgs e)
{
try
{
DataTable dt = new DataTable("Data");
dt.Columns.Add("id", System.Type.GetType("System.String"));
dt.Columns.Add("Name", System.Type.GetType("System.String"));
DataRow dr = dt.NewRow();
dr[0] = "a";
dr[1] = "abc";
dt.Rows.Add(dr);
datagrid1.ItemsSource = dt.DefaultView;
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Error =rn" + ex.Message);
// *********  *no error - delete all exist rows + make a new row **********
}
}
private void New_Datagrid_Row_v5(object sender, RoutedEventArgs e)
{
try
{
DataTable dt = new DataTable("Data");
// Method 1 
dt.Columns.Add("column0", System.Type.GetType("System.String"));
// Method 2 
DataColumn dc = new DataColumn("column1", System.Type.GetType("System.Boolean"));
dt.Columns.Add(dc);
DataRow dr = dt.NewRow();
dr["column0"] = "AX";
dr["column1"] = true;
dt.Rows.Add(dr);
// Doesn't initialize the row 
DataRow dr1 = dt.NewRow();
dt.Rows.Add(dr1);
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Error =rn" + ex.Message);
// ****************************** Nothing *******************
}
}
private void New_Datagrid_Row_v6(object sender, RoutedEventArgs e)
{
try
{
DataTable dt = new DataTable("Data");
// dt.Columns.Add("id");
//dt.Columns.Add("Name");
int Id = 7;
string Name = "HeyHo";
int Height = 22;
int Width = 22;
int PosTop = 44;
int PosLeft = 44;
string Execute = "Explorer";
string Image = "/Images/Picture.png";

dt.Rows.Add(Id, Name, Height, Width, PosTop, PosLeft, Execute, Image);
datagrid1.ItemsSource = dt.DefaultView;
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Error =rn" + ex.Message);
// *****************  * error array longer as the table colums* ***********
}
}

错误重播=

**New_Datagrid_Row_v1 * 错误数组长于表列 * **

**New_Datagrid_Row_v2 * 无错误 - 无 * **

**New_Datagrid_Row_v3 * 错误列"ID"不在表中 * **

**New_Datagrid_Row_v4 * 无错误 - 删除所有现有行 + 创建新行 * **

**New_Datagrid_Row_v5 * 无 * **

**New_Datagrid_Row_v6 * 错误数组比表列长 * **

。这就是我所拥有的一切。我也尝试了绑定,所以我做了一个集合 - 可以添加简单的新行,但随后我无法加载 - 将其保存到 XML 文件 - 或者我无法弄清楚如何做到这一点......

我的大项目是 C# WPF 但没有绑定和 MVVM - 所以现在我需要一种简单的方法来做到这一点,我可以包含该工作集 - 稍后我不会更多地绑定 MVVM,但现在它有很多重写......

我认为我的大问题是我将所有内容加载到数据集中(名称??-是从我的XML文件中捕获的(,从中我需要捕获它--Stream任何内容-并将新数据放入该集合中,但我不明白我该怎么做...或者其他方式,我需要复制孔表项目,然后按该顺序将新数据集放入并再次放入表中......

谢谢4所有帮助:-(

制造

安迪·

@ jdweng =

XAML 定义列= 是的,我做了那个 bevore,但后来我的加载 XML不明白

<DataGrid x:Name="datagrid1"   SelectionChanged="datagrid1_SelectionChanged" Background="LightGray" RowBackground="LightYellow" AlternatingRowBackground="LightBlue" AutoGenerateColumns="True" CanUserAddRows="True"  HorizontalAlignment="Left"  Height="125" Margin="137,56,0,0" VerticalAlignment="Top" Width="569">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" />
<DataGridTextColumn Header="Name" />
<DataGridTextColumn Header="Height" />
<DataGridTextColumn Header="Width" />
<DataGridTextColumn Header="PosTop" />
<DataGridTextColumn Header="PosLeft" />
<DataGridTextColumn Header="Execute" />
<DataGridTextColumn Header="Image" />
</DataGrid.Columns>
</DataGrid>

请参阅图像C#_datagrid_xml_load_without_declare_colums_bevore在此处输入图像说明

请参阅图像C#_datagrid_xml_load_without_declare_colums_after在此处输入图像说明

请参阅图像C#_datagrid_xml_load_with_declare_colums_bevore在此处输入图像说明

请参阅图像C#_datagrid_xml_load_with_declare_colums_after在此处输入图像说明

希望你能看到图片...

  • 当我在 XAML 中添加列时,我的 XML 加载打包不在矩阵中的项目 - 在它们旁边...... -当我不在 XAML 中添加列时,我的 XML 加载使他的一个矩阵并且工作正常...... 这就是为什么我不在 XAML 中创建哥伦斯 Bevore 的原因......

是的,我知道那个链接/页面 - 我测试了那个示例 bevore,但我遇到了我不能的问题 加载保存一个 XML 文件抛出那个....

@ Crowcoder = 简单的问题 - 对不起我的英语不好....

我需要添加一个新行,但出现错误消息

private void New_Datagrid_Row_v6(object sender, RoutedEventArgs e)
{
try
{
DataTable dt = new DataTable("Data");
// dt.Columns.Add("id");
//dt.Columns.Add("Name");
int Id = 7;
string Name = "HeyHo";
int Height = 22;
int Width = 22;
int PosTop = 44;
int PosLeft = 44;
string Execute = "Explorer";
string Image = "/Images/Picture.png";

dt.Rows.Add(Id, Name, Height, Width, PosTop, PosLeft, Execute, Image);
datagrid1.ItemsSource = dt.DefaultView;
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Error =rn" + ex.Message);
// *****************  * error array longer as the table colums* *******************************
}
}

我有 8 列,我说我用 8 列做了一个新行,但错误错误数组比表列更长

上来 - 我应该做什么?

感谢您的帮助:-(

最新更新