0

我有一个带有 2 个文本框和 2 个 DatePicker 的 Radgrid。这个想法是我有一个带有属性名称、值、从和直到有效的网格。我自己填写第一个文本框,用户必须填写值,从开始到结束。填写属性名称:(在页面加载中)

foreach (String s in testProperties) {
    DataRow dr = dt.NewRow();
    dr[0] = s;
    dr[1] = "";
    dr[2] = "";
    dr[3] = "";
    dt.Rows.Add(dr);
}

当用户点击“保存”时,我必须读出他填写的所有数据。(在 btnSave 点击)

foreach (GridDataItem dataItem in RadGrid1.Items) {
   String[] str = new String[3];
   str[0] = ((TextBox)dataItem["col2"].FindControl("TextBox2")).Text;
   str[1] = ((RadDatePicker)dataItem["col3"].FindControl("RadDatePicker1")).SelectedDate.ToString();
   str[2] = ((RadDatePicker)dataItem["col4"].FindControl("RadDatePicker2")).SelectedDate.ToString();
   properties.Add(((TextBox)dataItem["col1"].FindControl("TextBox1")).Text, str);
}

现在这就是我遇到问题的地方。当我读出数据时,我所有的“str”都有值“”,而不是用户填写的数据。

问题是,我在 texboxes 中的值如何保持“”?或者他们是读取数据的更好方法吗?

4

3 回答 3

0

如果您在回发期间和更新事件之前将数据重新绑定到 radgrid,通常会发生此错误。避免在任何事件触发之前重新绑定 radgrid。

于 2010-08-10T11:39:31.367 回答
0

我将重构代码如下,然后在调试模式下运行 - 这样做时,单步执行并确保 TextBoxes 真的被正确“找到”(即:它们不应该为空)

foreach (GridDataItem dataItem in RadGrid1.Items) {
   String[] str = new String[3];
   TextBox textBox1 = (TextBox)(dataItem["col1"].FindControl("TextBox1"));
   TextBox textBox2 = (TextBox)(dataItem["col2"].FindControl("TextBox2"));
   RadDatePicker datePicker1 = (RadDatePicker)(dataItem["col2"].FindControl("RadDatePicker1"));
   RadDatePicker datePicker2 = (RadDatePicker)(dataItem["col4"].FindControl("RadDatePicker2"));

   // stop here and check the controls from the previous 4 lines 
   // to make sure they are not null

   str[0] = textBox2.Text;
   str[1] = datePicker1.SelectedDate.ToString();
   str[2] = datePicker2.SelectedDate.ToString();
   properties.Add(textBox1.Text, str);

}

于 2010-05-07T06:21:01.553 回答
0

您是否在 GridTemplateColumns 中使用 Bind() 或 Eval()?

请参阅: GridEditableItem UpdateValues 不适用于 GridTemplateColumn?

如果不需要 GridTemplateColumns,我建议使用 GridBoundColumns 和 RadGrid 的 ItemCommand 或 InsertCommand/UpdateCommand 事件。

您可以使用 e.Item.OwnerTableView 从 GridDataItem 或 GridEditableItem 中读取数据,例如:

RadGrid1_UpdateCommand(object source, GridCommandEventArgs e)
{
GridEditableItem editedItem = (GridEditableItem)e.Item;
Hashtable values = new Hashtable();
e.Item.OwnerTableView.ExtractValuesFromItem(values, editedItem);
}
于 2010-05-08T17:14:55.620 回答