2010-07-21 8 views
0

Je travaille sur la base de données northwind. Dans mon AspxGridview je veux montrer comboBox. Je remplis la grille à l'arrière C# Je veux aussi que mon combo remplisse la fin.Afficher combo sur AspxGridview

<dxwgv:ASPxGridView ID="ASPxGridView1" runat="server" 
      AutoGenerateColumns="False" KeyFieldName="CategoryID" 
      oncelleditorinitialize="ASPxGridView1_CellEditorInitialize"> 
      <Columns> 
       <dxwgv:GridViewCommandColumn VisibleIndex="0" Width="80px"> 
        <EditButton Visible="True"> 
        </EditButton> 
        <NewButton Visible="True"> 
        </NewButton> 
        <DeleteButton Visible="True"> 
        </DeleteButton> 
       </dxwgv:GridViewCommandColumn> 
       <dxwgv:GridViewDataTextColumn Caption="CategoryID" FieldName="CategoryID" 
        VisibleIndex="1"> 
       </dxwgv:GridViewDataTextColumn> 
       <dxwgv:GridViewDataComboBoxColumn Caption="CategoryName" 
        FieldName="CategoryName" VisibleIndex="2"> 
        <PropertiesComboBox TextField="Value" ValueField="key" ValueType="System.Int32"> 
         <ClientSideEvents SelectedIndexChanged="function(s, e) { OnBankChanged(s); }" /> 
        </PropertiesComboBox> 
       </dxwgv:GridViewDataComboBoxColumn> 
       <dxwgv:GridViewDataTextColumn Caption="Description" FieldName="Description" 
        VisibleIndex="3"> 
       </dxwgv:GridViewDataTextColumn> 
      </Columns> 
     </dxwgv:ASPxGridView> 

Pour remplir la grille-je utiliser la syntaxe ci-dessous C#.

DataClasses1DataContext db = new DataClasses1DataContext(); 
      var r = from p in db.Categories 
        select p; 
      ASPxGridView1.DataSource = r; 
      ASPxGridView1.DataBind(); 

Pour remplir la cellule gridview du combo i utilise Bellow C# syntaxe

protected void ASPxGridView1_CellEditorInitialize(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewEditorEventArgs e) 
     { 
      if (!ASPxGridView1.IsEditing || e.Column.FieldName != "CategoryID") return; 
      ASPxComboBox combo = e.Editor as ASPxComboBox; 

      if (!(e.KeyValue == DBNull.Value || e.KeyValue == null)) //return; 
      { 
       object val = ASPxGridView1.GetRowValuesByKeyValue(e.KeyValue, "CategoryID"); 
       if (val == DBNull.Value) return; 
       Int32 CategoryID = (Int32)val; 
       FillCityCombo(combo, CategoryID); 
      } 

      combo.Callback += new CallbackEventHandlerBase(cmbBranch_OnCallback); 

     } 

     private void cmbBranch_OnCallback(object source, CallbackEventArgsBase e) 
     { 
      FillCityCombo(source as ASPxComboBox, Convert.ToInt16(e.Parameter)); 
     } 

     protected void FillCityCombo(ASPxComboBox cmb, Int32 CategoryID) 
     { 
      //cmb.Items.Clear(); 
      //cmb.DataSourceID = ""; 
      DataClasses1DataContext db = new DataClasses1DataContext(); 
      var r = from p in db.Categories 
        select new { p.CategoryID,p.CategoryName}; 
      cmb.DataSource = r; 
      cmb.DataBind(); 
     } 

Quand je lance le code AspxGridview bien remplir, mais quand je clique sur Modifier ou Nouvelle commande sur le côté gauche de mon grille me montre un message d'erreur ci-dessous:

**Object reference not set to an instance of an object.** 
  1. Quel est le problème?
  2. Comment résoudre ce problème?
  3. Comment lier un combo de cellules sur un gridview aspx?

Répondre

2

Ceci est la cause de ce problème. Vous vérifiez le nom du champ "CategoryID". Mais la colonne ComboBox est créé pour le champ « CategoryName »:

if (!ASPxGridView1.IsEditing || e.Column.FieldName != "CategoryID") return; 
ASPxComboBox combo = e.Editor as ASPxComboBox; 
+0

merci c'est vraiment une grosse erreur.thaks.Ce problème est résoudre mais quand je clique sur Nouveau lien de commande de AspxGridview mon combo n'est pas charger .vous s'il vous plaît me dire la raison Merci encore – shamim

+0

cliquez sur la nouvelle commande pourquoi cette méthode n'est pas actif (source objet, CallbackEventArgsBase e) privé vide cmbBranch_OnCallback { FillCityCombo (source comme ASPxComboBox, Convert.ToInt16 (e.Parameter)?); } – shamim

+0

Pourquoi mon événement OnCallback n'est pas actif. Comment activer cet event.plz voir ma syntaxe ci-dessus. – shamim

0

Bind en cas OnRowDataBound (ou équivalent AspxGridview)

+0

allez-vous envoyer un peu de syntaxe comment lier des données sur AspxGridView pour combo de cellules – shamim