如何在datagrid C#wpf中动态行?

时间:2015-04-20 14:18:42

标签: c# wpf datagrid

我想将datagrid的行数设置为等于用户在文本框中给出的数字。 意味着如果我在文本框中输入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;

2 个答案:

答案 0 :(得分:3)

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

使用循环首先添加行

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;

答案 1 :(得分:0)

我想最好使用

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

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

同时验证是否

dr[rownumber] = dt.NewRow();

按预期工作。如果是博士[10]不存在,你得到例外。