2013-03-28 82 views
2

我有可編輯的ASPxGridView和混淆如何填充ASPxComboBox初始化。如何填充ASPxComboBox?

考慮下面的情景,我們有一個帶有顏色的汽車列表。

Initial GridView

編輯被點擊後。

GridView after Edit Button is pressed

我想補充的數據源這個突出的顏色組合框。我的代碼是下面給出:

ASP代碼

<dx:ASPxGridView ID="grid" runat="server" AutoGenerateColumns="False" 
KeyFieldName="ID" onstartrowediting="ASPxGridView1_StartRowEditing"> 
<Columns> 
    <dx:GridViewCommandColumn VisibleIndex="0"> 
     <EditButton Visible="True"> 
     </EditButton> 
    </dx:GridViewCommandColumn> 
    <dx:GridViewDataTextColumn Caption="ID" FieldName="ID" Name="ID" 
     VisibleIndex="1"> 
    </dx:GridViewDataTextColumn> 
    <dx:GridViewDataTextColumn Caption="Car" FieldName="Car" Name="Car" 
     VisibleIndex="2"> 
     <EditItemTemplate> 
       <dx:ASPxComboBox ID="ASPxComboBox1" runat="server" 
          Text='<%# Eval("Car") %>'> 
       </dx:ASPxComboBox> 
     </EditItemTemplate> 
    </dx:GridViewDataTextColumn> 
    <dx:GridViewDataTextColumn Caption="Color" FieldName="Color" Name="Color" 
     VisibleIndex="3"> 
     <EditItemTemplate> 
      <dx:ASPxComboBox ID="colorCombo" runat="server"> 
      </dx:ASPxComboBox> 
     </EditItemTemplate> 
    </dx:GridViewDataTextColumn> 
</Columns> 

C#代碼

protected void Page_Load(object sender, EventArgs e) 
     { 
      DataTable dt = new DataTable(); 
      dt.Columns.Add("ID"); 
      dt.Columns.Add("Car"); 
      dt.Columns.Add("Color"); 

      DataRow dr = dt.NewRow(); 
      dr["ID"] = "1"; 
      dr["Car"] = "Suzuki"; 
      dr["Color"] = "Green"; 
      dt.Rows.Add(dr); 

      dr = dt.NewRow(); 
      dr["ID"] = "2"; 
      dr["Car"] = "Toyota"; 
      dr["Color"] = "Blue"; 
      dt.Rows.Add(dr); 

      dr = dt.NewRow(); 
      dr["ID"] = "3"; 
      dr["Car"] = "Toyota"; 
      dr["Color"] = "Black"; 
      dt.Rows.Add(dr); 

      grid.DataSource = dt; 
      grid.DataBind(); 
     } 

     protected void ASPxGridView1_StartRowEditing(object sender, 
          DevExpress.Web.Data.ASPxStartRowEditingEventArgs e) 
     { 
      DataTable dt = new DataTable(); 
      dt.Columns.Add("ID"); 
      dt.Columns.Add("Color"); 

      DataRow dr = dt.NewRow(); 
      dr["ID"] = "1"; 
      dr["Color"] = "Green"; 
      dt.Rows.Add(dr); 

      dr = dt.NewRow(); 
      dr["ID"] = "2"; 
      dr["Color"] = "Blue"; 
      dt.Rows.Add(dr); 

      dr = dt.NewRow(); 
      dr["ID"] = "3"; 
      dr["Color"] = "Black"; 
      dt.Rows.Add(dr); 

      dr = dt.NewRow(); 
      dr["ID"] = "4"; 
      dr["Color"] = "Red"; 
      dt.Rows.Add(dr); 

      dr = dt.NewRow(); 
      dr["ID"] = "5"; 
      dr["Color"] = "Yellow"; 
      dt.Rows.Add(dr); 


      ASPxComboBox cb=(ASPxComboBox)grid.FindEditRowCellTemplateControl(
           grid.Columns["Color"] as GridViewDataColumn 
           , "colorCombo"); 
      cb.DataSource = dt; 
      cb.DataBind(); 

     } 

把破發點上cb.Datasource = DT後;驗證值已填充,但未在頁面上查看。這個組合框的填充無法在page_load()上完成。如果有人知道解決方法,請用簡單而簡單的語言告訴我。

注意:Datasource來自database,在這裏我只是硬編碼在Pageload()

回答

4

你可以用XML數據源來做到這一點。這樣你可以避開代碼,填充列表並顯示當前的顏色選擇。您需要將GridViewDataTextColumn轉換爲GridViewDataComboBoxColumn,然後將XML數據源添加到它。太多添加一個XML數據源,只需右鍵單擊App_Data文件夾,然後選擇Add-> New Item。選擇一個XML文件並將其命名爲colors.xml。下面的代碼:

XML:

<colors> 
    <item ID="1" Color="Green"></item> 
    <item ID="2" Color="Blue"></item> 
    <item ID="3" Color="Black"></item> 
    <item ID="4" Color="Red"></item> 
    <item ID="5" Color="Yellow"></item> 
</colors> 

行添加到ASPX:

<asp:XmlDataSource ID="colorsXML" runat="server" DataFile="~/App_Data/colors.xml" XPath="colors/item" ></asp:XmlDataSource> 

變化:

<dx:GridViewDataTextColumn Caption="Color" FieldName="Color" Name="Color" 
    VisibleIndex="3"> 
    <EditItemTemplate> 
     <dx:ASPxComboBox ID="colorCombo" runat="server"> 
     </dx:ASPxComboBox> 
    </EditItemTemplate> 
</dx:GridViewDataTextColumn> 

要這樣:

<dx:GridViewDataComboBoxColumn Caption="Color" FieldName="Color" Name="Color" VisibleIndex="3"> 
<PropertiesComboBox DataSourceID="colorsXML" ValueField="ID" TextField="Color"></PropertiesComboBox> 
</dx:GridViewDataComboBoxColumn> 

消滅在StartRowEditing功能的代碼,你會不會需要它:

protected void ASPxGridView1_StartRowEditing(object sender, DevExpress.Web.Data.ASPxStartRowEditingEventArgs e) 
{ 

} 
+0

似乎不錯,我會嘗試這一點,但我的'datasource'從數據庫中來。對不起,我在我的問題中有硬編碼的數據源。 – AndroidLearner

+1

這是沒有問題的,只需添加一個SQLDatasource(或任何你需要的)來代替XML。應該仍然工作正常。 – dcreight

2

我去與dcreight所示的方法。

如果您使用的目標數據源綁定的組合框,你可以如下修改由他提出的代碼:

<dx:GridViewDataComboBoxColumn Caption="Color" FieldName="ID" Name="Color" VisibleIndex="3"> 
<PropertiesComboBox DataSourceID="objColors" ValueField="ID" TextField="Color" ValueType="System.String"></PropertiesComboBox> 
</dx:GridViewDataComboBoxColumn> 

確保字段名和propertiescombobox比賽valuefield。 還定義在代碼中的ObjectDataSource在GridView外

<asp:ObjectDataSource ID="objColors" SelectMethod="GetColors" TypeName="ClassFileName" 
runat="server"></asp:ObjectDataSource>