2010-05-06 2 views
0

У меня есть Radgrid с 2 текстовыми полями и 2 DatePickers. Идея состоит в том, что у меня есть сетка с именем свойства, значением, действительным с и до. Я сам заполняю первый текстовый ящик, пользователь должен заполнить это значение, начиная с и до. Заполнение в propertynames: (В PageLoad)Чтение текста из текстового поля в 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» имеют значение «» вместо данных, которые пользователь заполняет.

Вопрос в том, как мои значения в texbox остаются «?»? Или их лучший способ считывать данные?

ответ

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

+0

Когда я запускаю в режиме отладки с вашим решением, я считаю, что мои элементы управления не являются нулевыми. Проблема в том, что текст текстового поля2 остается «". Однако текст Textbox1 (тот, который я заполняю собой кодом, см. Выше) имеет его значение (например, «м²»). Это, наверное, глупая ошибка, но я просто не вижу ее. – Christophe

0

Вы используете Bind() или Eval() в GridTemplateColumns?

См: GridEditableItem UpdateValues doesn't work with GridTemplateColumn?

Если GridTemplateColumns не нужны, я бы предложил использовать GridBoundColumns и ItemCommand или InsertCommand/UpdateCommand события RadGrid в.

Вы можете считывать данные из GridDataItem или GridEditableItem с помощью e.Item.OwnerTableView, например:

RadGrid1_UpdateCommand(object source, GridCommandEventArgs e) 
{ 
GridEditableItem editedItem = (GridEditableItem)e.Item; 
Hashtable values = new Hashtable(); 
e.Item.OwnerTableView.ExtractValuesFromItem(values, editedItem); 
} 
0

Эта ошибка обычно возникает, если вы повторно связывания данных в radgrid во время обратной передачи и перед событие обновления. Избегайте переустановки радиосети до запуска любого события.

Смежные вопросы