【问题标题】:How to populate ASPxComboBox?如何填充 ASPxComboBox?
【发布时间】:2013-03-28 13:47:12
【问题描述】:

我有可编辑的 ASPxGridView 并且对如何填充 ASPxComboBox 初始化感到困惑。

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

点击编辑后。

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

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() 中。

【问题讨论】:

    标签: c# devexpress aspxgridview aspxcombobox


    【解决方案1】:

    您可以使用 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)
    {
    
    }
    

    【讨论】:

    • 看起来不错我会试试这个,但我的 datasource 来自数据库。抱歉,我的问题中有硬编码数据源。
    • 这没问题,只需添加一个 SQLDatasource(或任何您需要的)来代替 XML。应该仍然可以正常工作。
    【解决方案2】:

    我采用 dcreight 所示的方法。

    如果你使用objectdata源绑定你的combobox,你可以修改他建议的代码如下:

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

    确保属性组合框的字段名和值字段匹配。 还要在gridview之外的代码中定义objectdatasource

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 2012-02-15
      • 2013-04-16
      • 2012-06-26
      • 2020-01-30
      • 1970-01-01
      相关资源
      最近更新 更多