Im développant un contrôle utilisateur qui contient deux RadGrids. Lorsqu'un utilisateur sélectionne une ligne dans la grille 1, la page postsback. À ce stade, je crée un Datatable et DataRow et l'ajoute à la source de données de la grille 2.Viewstate, datatable et propriétés!
Le problème que je rencontre globalement est que le datatable est perdu et recréé chaque fois que la page est postée. J'ai donc essayé de sauvegarder la datatable dans le viewstate en utilisant une propriété, mais cela ne semble pas avoir aidé. Je suis assez nouveau à l'utilisation des propriétés arrêt complet, donc mon code est peut-être faux.
Ma solution:
public class DynamicDocumentSelectorWebUITypeEditor : Telerik.Cms.Web.UI.WebUITypeEditor<string>
{
private System.Data.DataTable _oDataTable;
public System.Data.DataTable getTable() {
System.Data.DataTable oDataTable = new System.Data.DataTable();
oDataTable.Columns.Add(new System.Data.DataColumn("DocumentID", typeof(string)));
oDataTable.Columns.Add(new System.Data.DataColumn("DocumentName", typeof(string)));
oDataTable.Columns.Add(new System.Data.DataColumn("DocumentExtension", typeof(string)));
return oDataTable;
}
public System.Data.DataTable oDataTable {
get {
object o = this.ViewState["DataTable"];
if(o == null) {
return _oDataTable;
}
return (System.Data.DataTable)o;
}
set {
this._oDataTable = value;
this.ViewState["DataTable"] = value;
}
}
protected override void CreateChildControls() {
base.CreateChildControls();
if (this.oDataTable == null) {
this.oDataTable = getTable();
}
}
//the following function is executed when a row in grid 1 is selected
protected void GridDocumentsInLibrary_SelectedIndexChanged(object sender, EventArgs e) {
//loop through each selected row
foreach (Telerik.Web.UI.GridDataItem oItem in GridDocumentsInLibrary.SelectedItems) {
//System.Data.DataTable oDt = this.oDataTable;
foreach (System.Data.DataRow oDataRow in this.oDataTable.Rows) {
//check whether the row already exists in the datatable
//if (oDataRow["DocumentID"] != oItem["DocumentID"].Text) {
System.Data.DataRow dr = this.oDataTable.NewRow();
dr["DocumentID"] = oItem["DocumentID"].Text;
dr["DocumentName"] = oItem["DocumentName"].Text;
dr["DocumentExtension"] = oItem["DocumentExtension"].Text;
this.oDataTable.Rows.Add(dr);
//}
}
}
//set datasource of second grid
GridSelectedDocuments.DataSource = this.oDataTable;
GridSelectedDocuments.DataBind();
}
}
ce que je fais tout à fait tort? Quelqu'un peut-il aider?
Merci à l'avance higgsy
Lorsque vous dites 'Ma solution', voulez-vous dire que cet extrait de code fonctionne? – Rabid