2010-05-06 6 views
0

J'ai un Radgrid avec 2 Textboxes et 2 DatePickers. L'idée est que j'ai une grille avec un nom de propriété, valeur, valide à partir de et jusqu'à. Je remplis moi-même la première Textbox, l'utilisateur doit remplir la valeur, depuis et jusqu'à. Remplissage du propertyNames: (Dans le pageload)Lire le texte hors de la zone de texte dans Radgrid

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

Lorsque l'utilisateur a frappé « Enregistrer » Je dois lire toutes les données qu'il remplit (Cliquez dans le 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); 
} 
.

Maintenant, c'est là que j'ai le problème. Quand je lis les données, tous mes 'str' ont la valeur "" à la place des données que l'utilisateur remplit.

La question est, comment est-ce que mes valeurs dans les texboxes restent ""? Ou est-ce leur meilleur moyen de lire les données?

Répondre

0

Je factoriser le code comme suit puis exécutez en mode débogage - en le faisant, parcourir et assurez-vous que les zones de texte sont réellement « trouvé » correctement (elles ne doivent pas être nul)

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

Lorsque je cours en mode débogage avec votre solution, mes commandes ne sont pas nulles. Le problème est que le texte de Textbox2 reste "". Pourtant le Text of Textbox1 (celui que je me remplis de code, voir ci-dessus) a sa valeur (par exemple "m²"). C'est probablement une erreur stupide quelque part mais je ne peux pas le voir. – Christophe

0

Utilisez-vous Bind() ou Eval() dans GridTemplateColumns?

Voir: GridEditableItem UpdateValues doesn't work with GridTemplateColumn?

Si GridTemplateColumns ne sont pas nécessaires, je suggère d'utiliser GridBoundColumns et ItemCommand de RadGrid ou événements InsertCommand/UpdateCommand.

Vous pouvez lire les données de GridDataItem ou GridEditableItem en utilisant e.Item.OwnerTableView, par exemple:

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

Cette erreur se produit généralement si vous réappairant les données au cours RadGrid postback et avant l'événement de mise à jour. Évitez de relier le radgrid avant le déclenchement d'un événement.

Questions connexes