2010-05-06 29 views
0

我有一个包含2个文本框和2个DatePicker的Radgrid。 这个想法是,我有一个网格的属性名称,值,有效期从和直到。 我正在填写第一个文本框,用户必须填写值,从和直到。 填补了propertynames: (在页面加载)在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中的值如何保持“”?或者他们是读出数据的更好方法?

回答

0

如下我会重构代码,然后在调试模式下运行 - 这样做的时候,单步调试,确保了文本输入框是真正被“发现”正确(即:他们不应该为null)

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); 

}

+0

当我在调试模式下运行您的解决方案时,我发现我的控件不为空。 问题是Textbox2的文本仍然是“”。 然而Textbox1的文本(我用代码填写自己的代码见上)具有他的价值(例如“m²”)。 这可能是一个愚蠢的错误,但我不能看到它。 – Christophe 2010-05-07 08:07:48

0

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

参见: GridEditableItem UpdateValues doesn't work with GridTemplateColumn?

如果GridTemplateColumns是没有必要的,我会建议使用GridBoundColumns和radgrid控件的ItemCommand或将InsertCommand /更新命令事件。

你可以读出使用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); 
} 
0

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