2

我有 Editable ASPxGridView 并且对如何填充 ASPxComboBox init 感到困惑。

考虑以下场景,其中我们有一个带有颜色的汽车列表。

初始网格视图

单击编辑后。

按下编辑按钮后的 GridView

我想将数据源添加到这个突​​出显示的颜色组合框中。我的代码如下:

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

2 回答 2

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)
{

}
于 2013-03-29T16:42:23.963 回答
2

我采用 dcreight 所示的方法。

如果您使用 objectdata 源来绑定您的组合框,您可以修改他建议的代码如下:

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

确保 propertiescombobox 的 fieldname 和 valuefield 匹配。还要在gridview之外的代码中定义objectdatasource

  <asp:ObjectDataSource ID="objColors" SelectMethod="GetColors" TypeName="ClassFileName"
 runat="server"></asp:ObjectDataSource>
于 2013-03-29T18:21:10.883 回答