【问题标题】:c# wpf datagrid can't add new row problem (load xml as dataset)c# wpf datagrid can't add new row问题(将xml加载为数据集)
【发布时间】:2019-12-28 00:26:46
【问题描述】:

对于那个简单的问题感到抱歉,但我不明白为什么我不能独自解决... 我尝试了许多不同的方式,绑定......但总是大人认为我需要的东西不会在一起...... 现在有了该代码,我的主题将享受 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:(我也用直接创建的列写了,但我的 load 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 =\r\n" + 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 =\r\n" + 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 =\r\n" + 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 =\r\n" + 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 =\r\n" + 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 文件 - 或者我可以' t friggerout 如何做到这一点....

我的大项目在 c# wpf 中,但没有绑定和 mvvm - 所以现在我需要一种简单的方法来做这件事,我可以包含该工作集 - 后来我不会更多地去绑定 mvvm 但现在它太多了重写....

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

感谢 4all 的帮助 :-)

制造

安迪克

【问题讨论】:

  • 我完全看不懂问题的措辞。您能否尝试将其简化为一个最小的、可验证的示例,并清楚地说明您期望什么结果以及您得到什么结果?
  • XAML 需要定义列。您没有列,这导致异常:wpf-tutorial.com/datagrid-control/custom-columns

标签: c# wpf datagrid row add


【解决方案1】:

@jdweng =

xaml 定义列 = 是的,我这样做了,但后来我的 load 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 enter image description here

查看图片c#_datagrid_xml_load_without_declare_colums_after enter image description here

查看图片c#_datagrid_xml_load_with_declare_colums_bevore enter image description here

查看图片c#_datagrid_xml_load_with_declare_colums_after enter image description here

希望你能看到图片...

  • 当我在 xaml 中添加列时,我的 xml-load 会打包不在矩阵中的项目 - 在它们旁边.... - 当我不在 xaml 中添加列时,我的 xml-load 使他的一个矩阵工作正常...... 这就是为什么我不在 xaml 中创建 colums 的原因....

是的,我知道那个链接/页面 - 我测试了那个例子,但我遇到了我不能的问题 加载保存一个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 =\r\n" + ex.Message);
                // *****************  * error array longer as the table colums* *******************************
            }

        }

我有 8 个列,我说我用 8 个列创建了一个新行,但是错误 错误数组长于表格列

来吧 - 我该怎么办?

感谢您的帮助:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多