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

次のようにコードをリファクタリングし、デバッグ モードで実行します。その際、ステップ スルーして、TextBox が実際に正しく「検出」されていることを確認します (つまり、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);

}

于 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 に答える