2011-05-19 65 views
1

我有一个gridview,我做了可编辑。这有效......有点。ASP.NET 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

+0

你如何在gridview中显示时间我的意思是什么格式(01:30,12:00 am/pm或1.30)我认为你的时间的字符串表示不能转换为整数。 – Devjosh 2011-05-19 08:54:01

+0

日期不应该是一个问题,但它显示为'yyyy-MM-dd HH:mm tt'例如。日期时间。但是,我的时间字段表示“小时,分钟”用于任务/项目,无论如何...... :) – KristianB 2011-05-19 08:57:09

+0

您得到的确切错误是什么? – 2011-05-19 09:10:35

回答

0

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

编辑:

好了,你的错误消息是有点混乱,因为它说的错误是在Convert.ToDouble,但你已经把Convert.ToInt32在你的问题。无论如何,你有一个NullReferenceException,所以要么linqObject为空(所以你不能访问time财产),或time为空(所以你不能访问Text财产)。也许一些空检会帮助你。

另一编辑:

好了,你真正的问题是你不能让你的txtTime文本框的参考。您可能需要为您的GridView发布一些标记,并为事件处理程序提供一些代码。这里有一些建议:

  • 如果你调试到你的事件处理程序,检查e.RowIndex的值 - 确保这对应于正确的行。
  • 确保您在代码隐藏中使用的ID字符串与标记中的ID完全相同。
  • 你使用的是什么UpdatePanels,或者GridView正在更新客户端?
  • ViewState关闭了吗?
+0

* *我的问题/问题是** _HOW_我指向特定的TextBoxes吗?数据验证/解析根本不是问题。但它说它无法找到名为'txtTime'的控件... – KristianB 2011-05-19 09:19:28

+0

对不起,我的部分是错误的...应该是'Convert.ToInt32' – KristianB 2011-05-19 09:21:24

0

时间不应该保存为数据库中的整数。最好将它作为日期时间保存在数据库中。因此将日期时间类型设置为 - -linq-object-reference - 。time

然后使用下面的代码转换您的textBox字符串值(HH:MM - >如:03:45)为DateTime使用下面的代码:

using System.Globalization; 

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

希望这将解决问题...