我想将多个值从窗体保存到数据表,然后我将此表绑定到 Datagridview 。值在Datatable
中添加,但是在:
dataGridViewX1.DataSource = dt.DefaultView.Table);
绑定点错误显示
对象引用未设置为对象的实例
我该如何解决?
public AddOrder(string ItemName,int Qty,Double Price)
{
try
{
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("Item Name");
dt.Columns.Add("Qty");
dt.Columns.Add("Unit Price");
dt.Columns.Add("Amounts");
DataRow dr = dt.NewRow();
dr["id"] = a;
a++;
dr["Item Name"] = ItemName;
dr["Qty"] = Qty;
dr["Unit Price"] = Price;
dr["Amounts"] = (Convert.ToInt32(dr["Qty"]) * Convert.ToInt32(dr["Unit Price"]));
dt.Rows.Add(dr);
dataGridViewX1.DataSource = dt.DefaultView.Table;
}
catch(Exception ee)
{
DevComponents.DotNetBar.MessageBoxEx.Show(ee.Message,"Error Message");
}
}
答案 0 :(得分:1)
直接将data table
分配给gridview
:
dataGridViewX1.DataSource = dt;
而不是:
dataGridViewX1.DataSource = dt.DefaultView.Table;
答案 1 :(得分:1)
是在InitializeComponent方法中初始化 dataGridViewX1 吗?
I Think it is parameterized constructor I it does not has initialization of controls
1)解决方案
InitializeComponent(); need to call this method.
它正在使用我的应用程序
答案 2 :(得分:1)
对象引用异常可能发生在与数据绑定相关的事件处理程序中。例如,假设您的数据网格在标记中具有类似的内容:
<asp:GridView ID="GridView1" OnRowDataBound="GridView1_RowDataBound"
当您调用GridView1.DataBind()
时,在数据绑定过程中为每一行执行GridView1_RowDataBound
方法。此方法可能包含一些错误代码,以便为您提供“对象引用...”异常。
答案 3 :(得分:0)
放置一个断点并检查你是否有价值
- dr["Qty"] = Qty;
- dr["Unit Price"] = Price;
最有可能其中一个或两个都有空值。
或尝试此操作并检查
- dr["Qty"] = 3;
- dr["Unit Price"] = 4;
答案 4 :(得分:0)
您的代码与绑定方式一样。
我通过定义缺失的变量(a)使其成功:
AddOrder("something", 2, 100);
...
//assign some default value since the PO did not define the variable at all...
int a=0;
现在,建议您为这样的列指定数据类型:
dt.Columns.Add("Qty",typeof(int));
dt.Columns.Add("Unit Price",typeof(Decimal));
dt.Columns.Add("Amounts",typeof(Decimal));
另外,如果您计划编辑数据,那么在保护金额后,您应该使用带有该列的表达式,如下所示:
dt.Columns.Add("Amount", typeof(Decimal), "Qty *[Unit Price]");
更新
假设绑定发生错误,请尝试:
dataGridViewX1.DataSource = null;
dataGridViewX1.DataSource = dt.DefaultView;
答案 5 :(得分:0)
private void BindDataGrid()
{
DataTable table = new DataTable();
// Insert code to populate a DataTable with data.
// Bind grid to DataTable.
dataGrid1.DataSource = table;
}
答案 6 :(得分:0)
使用
dataGridViewX1.DataSource = dt;
插入断点以查看dt值。
答案 7 :(得分:-1)
此错误是由于尝试访问空对象的属性所致。
每当出现此类错误时,您都可以尝试逐步调试和调试源代码。 这将帮助您到达引发错误的行。
您可以查看哪个对象为空,然后通过弄清楚代码中为什么该对象为空来解决此错误。