如何在数据网格 C# wpf 中动态行?

How to rows dynamically in datagrid C# wpf?

我想将数据网格的行数设置为等于用户在文本框中给出的数字。 意味着如果我在文本框中输入 6,它应该在数据网格中添加 6 行。 这是我想要的。我可能是错的。 但是正在抛出 Null 异常。 如何解决我的问题?

代码如下:

          DataTable dt;
          DataRow dr;
        int rownumber=0;
        dt = new DataTable("emp2");
        DataColumn dc3 = new DataColumn("Wi", typeof(double));
        DataColumn dc4 = new DataColumn("Hi", typeof(double));

        rownumber = Int32.Parse(txtBexNumber.Text);
        dr[rownumber] = dt.NewRow();
        dt.Rows.Add(dr);
        dt.Columns.Add(dc3);
        dt.Columns.Add(dc4);

        datagrid1.ItemsSource = dt.DefaultView;

我想最好用

Int32.TryParse(txtBexNumber.Text, out rownumber);

(也许你得到了解析空字符串的错误?如果可能的话,尝试调试空指针异常的准确位置)

同时验证 if

dr[rownumber] = dt.NewRow();

按预期工作。如果例如dr[10] 不存在,你得到一个例外。

您正在创建数据表,然后尝试立即访问 table 中用户指定的行,即使尚未添加任何行。

首先使用循环添加行

for(int i = 0; i < rowNumber; i++)
{
    dr = dt.NewRow();
    dt.Rows.Add(dr);
}

附带说明一下,在使用 WPF 时,使用 ObservableCollection 对象比使用 DataTables 和 DataRows 更容易。数据更容易理解和使用,而不是尝试使用 DataRows 和 DataColumns。

var data = new ObservableCollection<MyObject>();

for (int i = 0; i < rowNumber; i++)
    data.Add(new MyObject() { Wi = 0, Hi = 0 });

dataGrid1.ItemsSource = data;