ASP.NET GridView - 未将对象引用设置为对象的实例

时间:2011-05-19 08:19:53

标签: asp.net linq

我有一个gridview,我做了可编辑的。这有点......有点。

现在我正在尝试使用新数据更新一行。

该行包含以下列:

=========================

|时间|日期|项目|等等|

=========================

我正在尝试保存显示为编辑一行的编辑框的内容。

我这样做是这样的:

TextBox time = (TextBox) GridView1.Rows[e.RowIndex].FindControl("txtTime");

--linq-object-reference--.time = Convert.ToInt32(time.Text);

但我收到错误......有人知道为什么吗?

修改

澄清我的问题......我想知道如何获取那些TextBoxes内容,如下图所示: enter image description here

EDIT2:

好的,这是完全错误... enter image description here

2 个答案:

答案 0 :(得分:0)

我不确定5,417-05-2011 14:15:31txtTime TextBox中的文本,但这两种文本都不能转换为整数。对于第一个字段,您可能需要一些自定义字符串解析,而对于第二个字段,您应该能够使用Convert.ToDateTime(time.Text)

修改

好的,您的错误消息有点令人困惑,因为它说错误在Convert.ToDouble,但您已将Convert.ToInt32放在您的问题中。无论如何,你有一个NullReferenceException,所以linqObject为空(因此你无法访问time属性),或time为空(所以你可以不能访问Text属性。也许一些空检查会帮助你。

另一个编辑:

好的,所以你真正的问题是你无法获得对txtTime TextBox的引用。您可能需要为GridView发布一些标记,并为事件处理程序发布一些代码。以下是一些建议:

  • 如果您调试到事件处理程序,请检查e.RowIndex的值 - 确保这对应于正确的行。
  • 确保您在代码隐藏中使用的ID字符串与标记中的ID完全相同。
  • 您使用的是任何UpdatePanel,还是GridView正在更新客户端?
  • ViewState是否已关闭?

答案 1 :(得分:0)

不应将时间保存为数据库中的整数。最好将它作为DateTime保存在database.So中。将 -linq-object-reference - .time 设置为Datetime类型。

然后使用以下代码将textBox字符串值(HH:mm - >例如:03:45)转换为DateTime ,使用以下代码:

using System.Globalization;

--linq-object-reference--.time=DateTime.ParseExact(time.Text,"HH:mm",  CultureInfo.InvariantCulture);

希望这能解决问题...