C# 如何获取数据网格中单元格的值?

C# 如何获取数据网格中单元格的值?,c#,asp.net,datagrid,C#,Asp.net,Datagrid,尝试使用ASP.NET C#从我的DATAGRID中获取单元格值时,我收到错误消息说“对象引用未设置为对象的实例”。以下是我所拥有的: foreach (DataGridItem dgItem in dgPrintTicket.Items) { string itm = dgItem.Cells[1].FindControl("Item_Number").ToString(); } 谢谢dgItem.Cells[1]。FindControl(“项目编号”)为空,ToString()正在

尝试使用ASP.NET C#从我的DATAGRID中获取单元格值时,我收到错误消息说“对象引用未设置为对象的实例”。以下是我所拥有的:

foreach (DataGridItem dgItem in dgPrintTicket.Items)
{
    string itm = dgItem.Cells[1].FindControl("Item_Number").ToString();
}

谢谢

dgItem.Cells[1]。FindControl(“项目编号”)为空,ToString()正在尝试将空对象转换为字符串,但失败。您需要确保A)数据网格中至少有2列,B)FindControl(“项目编号”)将实际返回某些内容。

要克服“对象引用未设置为对象实例”错误,请确保代码为空安全:

foreach (DataGridItem dgItem in dgPrintTicket.Items)
{
    var control = dgItem.Cells[1].FindControl("Item_Number");

    string itm = control != null ? control.ToString() : null;
}
但我认为您应该尝试通过以下代码获取单元格的值:

foreach (DataGridItem dgItem in dgPrintTicket.Items)
{
    string itm = dgItem.Cells[1].Text;
}
如果FindControl确实找到了一个控件,请使用以下代码片段:

foreach (DataGridItem dgItem in dgPrintTicket.Items)
{
    var control = dgItem.Cells[1].FindControl("Item_Number") as Label;

    string itm = control != null ? control.Text : null;
}

是,共有4列,第二列为“项目编号”。DataGrid有3行数据,因此不确定发生了什么。好的,修复了错误,但我无法从您所述的任何解决方案中获得值。调试第一个解决方案时,我可以看到“control”变量中的值,但当我将其分配给“itm”时,该值显示为“System.Web.UI.WefControls.Label”,而不是实际值。为什么?control.ToString()方法默认显示控件的类型。在您的例子中,这是“System.Web.UI.WefControls.Label”。假设标签包含您的值,您可能会在control.Text属性中找到您的值。此单元格中还有哪些控件?尝试了control.Text,但“Text”选项未显示或作为选项出现。我只能使用control.ToString()。它是我在ItemTemplates的DataGrid中添加的标签控件。当我调试并将光标放在“control”变量上时,它会显示control=“Text=F2140”,因此它在查找控件和值时,由于一些奇怪的原因无法提取它。抱歉,错过了转换为“System.Web.UI.WefControls.Label”的类型。在变体3中修复了此问题。我发布了另一个问题,但没有得到响应。已经两天不知道你是否能帮上忙了。在同一个数据网格中,其中一列是DropDownList,其他三列只是标签。当我将DataGrid绑定到DataTable时,DropDownList保持为空。没有任何东西和它联系在一起。你知道我会是什么吗?