我想将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;
答案 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]不存在,你得到例外。