Devexpress 将GridViewComboxColumn绑定到加载页面的数据源

Devexpress 将GridViewComboxColumn绑定到加载页面的数据源,devexpress,aspxgridview,Devexpress,Aspxgridview,我有一个带有GridViewComboBoxColumn的网格。我有一个数据源,它是一个对象列表。我需要分配页面加载中的数据。这不起作用: protected void Page_Load() { GridViewDataComboBoxColumn gridColumn = Grid.Columns["NumericData"] as GridViewDataComboBoxColumn; gridColumn.PropertiedropsComboBox.D

我有一个带有GridViewComboBoxColumn的网格。我有一个数据源,它是一个对象列表。我需要分配页面加载中的数据。这不起作用:

protected void Page_Load() {
    GridViewDataComboBoxColumn gridColumn = Grid.Columns["NumericData"]
        as GridViewDataComboBoxColumn;

    gridColumn.PropertiedropsComboBox.DataSource = DataSourceMadeUpOfAList;
    gridColumn.PropertiesComboBox.TextField = "SpelledOutNumbers";
    gridColumn.PropertiesComboBox.ValueField = "ActualNumbers";
...
我在这里看过:

这确实有效,但仅在编辑表单中有效。我启用了筛选行,这些下拉列表也需要填充。上述解决方案不适用于过滤器(原因显而易见)。欢迎提出任何意见


谢谢。

此代码在这里运行良好。请确保ValueField的类型与ComboBoxColumn绑定到的列的类型(column.FieldName)相同。最后,我举了一个例子:

    <dx:ASPxGridView ID="ASPxGridView1" Width="100%"  ClientInstanceName="grid"
    DataSourceID="SqlDataSource2" KeyFieldName="ProductID" AutoGenerateColumns="False" runat="server">
    <Columns>
        <dx:GridViewCommandColumn VisibleIndex="0">
            <ClearFilterButton Visible="True">
            </ClearFilterButton>
        </dx:GridViewCommandColumn>
        <dx:GridViewDataTextColumn FieldName="ProductID" ReadOnly="True" VisibleIndex="0">
            <EditFormSettings Visible="False" />
        </dx:GridViewDataTextColumn>
        <dx:GridViewDataTextColumn FieldName="ProductName" VisibleIndex="1">
        </dx:GridViewDataTextColumn>
        <dx:GridViewDataTextColumn FieldName="SupplierID" VisibleIndex="2">
        </dx:GridViewDataTextColumn>
        <dx:GridViewDataComboBoxColumn FieldName="CategoryID" VisibleIndex="3">
            <PropertiesComboBox ValueType="System.String">
            </PropertiesComboBox>
        </dx:GridViewDataComboBoxColumn>
    </Columns>
</dx:ASPxGridView>

        <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
            ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT * FROM [Products]">
        </asp:SqlDataSource>



    protected void Page_Load(object sender, EventArgs e) {
        GridViewDataComboBoxColumn col = ASPxGridView1.Columns["CategoryID"] as GridViewDataComboBoxColumn;
        col.PropertiesComboBox.DataSource = GetDataSource();
        col.PropertiesComboBox.ValueField = "Id";
        col.PropertiesComboBox.TextField = "Text";
    }

...


public class Record {
    public Record(int id) {
        this.id = id;
        this.text = "Row " + id.ToString();
    }

    private int id;
    public int Id {
        get { return id; }
        set {
            id = value;
        }
    }
    private string text;
    public string Text {
        get { return text; }
    }

受保护的无效页面加载(对象发送方、事件参数e){
GridViewDataComboBoxColumn=ASPxGridView1.Columns[“CategoryID”]作为GridViewDataComboxColumn;
col.PropertiesComboBox.DataSource=GetDataSource();
col.PropertiesComboBox.ValueField=“Id”;
col.PropertiesComboBox.TextField=“Text”;
}
...
公开课记录{
公共记录(int id){
this.id=id;
this.text=“Row”+id.ToString();
}
私有int-id;
公共整数Id{
获取{return id;}
设置{
id=值;
}
}
私有字符串文本;
公共字符串文本{
获取{返回文本;}
}

此代码在此处工作正常。请确保ValueField的类型与ComboBoxColumn绑定到的列的类型(column.FieldName)相同。最后,我举了一个示例:

    <dx:ASPxGridView ID="ASPxGridView1" Width="100%"  ClientInstanceName="grid"
    DataSourceID="SqlDataSource2" KeyFieldName="ProductID" AutoGenerateColumns="False" runat="server">
    <Columns>
        <dx:GridViewCommandColumn VisibleIndex="0">
            <ClearFilterButton Visible="True">
            </ClearFilterButton>
        </dx:GridViewCommandColumn>
        <dx:GridViewDataTextColumn FieldName="ProductID" ReadOnly="True" VisibleIndex="0">
            <EditFormSettings Visible="False" />
        </dx:GridViewDataTextColumn>
        <dx:GridViewDataTextColumn FieldName="ProductName" VisibleIndex="1">
        </dx:GridViewDataTextColumn>
        <dx:GridViewDataTextColumn FieldName="SupplierID" VisibleIndex="2">
        </dx:GridViewDataTextColumn>
        <dx:GridViewDataComboBoxColumn FieldName="CategoryID" VisibleIndex="3">
            <PropertiesComboBox ValueType="System.String">
            </PropertiesComboBox>
        </dx:GridViewDataComboBoxColumn>
    </Columns>
</dx:ASPxGridView>

        <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
            ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT * FROM [Products]">
        </asp:SqlDataSource>



    protected void Page_Load(object sender, EventArgs e) {
        GridViewDataComboBoxColumn col = ASPxGridView1.Columns["CategoryID"] as GridViewDataComboBoxColumn;
        col.PropertiesComboBox.DataSource = GetDataSource();
        col.PropertiesComboBox.ValueField = "Id";
        col.PropertiesComboBox.TextField = "Text";
    }

...


public class Record {
    public Record(int id) {
        this.id = id;
        this.text = "Row " + id.ToString();
    }

    private int id;
    public int Id {
        get { return id; }
        set {
            id = value;
        }
    }
    private string text;
    public string Text {
        get { return text; }
    }

受保护的无效页面加载(对象发送方、事件参数e){
GridViewDataComboBoxColumn=ASPxGridView1.Columns[“CategoryID”]作为GridViewDataComboxColumn;
col.PropertiesComboBox.DataSource=GetDataSource();
col.PropertiesComboBox.ValueField=“Id”;
col.PropertiesComboBox.TextField=“Text”;
}
...
公开课记录{
公共记录(int id){
this.id=id;
this.text=“Row”+id.ToString();
}
私有int-id;
公共整数Id{
获取{return id;}
设置{
id=值;
}
}
私有字符串文本;
公共字符串文本{
获取{返回文本;}
}

我在当前项目中复制了此解决方案,但它不起作用。当我浏览页面加载并跨过TextField设置时,我观察了数据,项目计数为0。数据位于网格列的数据源中,但看起来似乎数据实际上没有绑定到列。唯一真正的di与项目不同的是,我的网格中没有DataSourceID,因为我的数据是在代码隐藏中提供的。此外,如果ValueType要与ValueField匹配,为什么在Id为int时ValueType设置为String?因为您的数据是在运行时提供的,请确保您将网格绑定到Page_Init事件中的数据,如e article我确实在Init中绑定了我的数据,但不是在正确的时间。现在得到了。谢谢!它在标题上作为下拉过滤器工作吗?或者它在每行上显示下拉列表吗?我在当前项目中复制了此解决方案,但它不工作。当我遍历页面加载并跨过文本字段设置时,我观察了数据,然后项的计数为0。数据位于网格列的数据源中,但看起来并不像数据实际绑定到列。除了项目之外,唯一真正的区别是我的网格中没有数据源ID,因为我的数据是在代码隐藏中提供的。此外,如果ValueType与ValueField匹配,为什么ValueTy是当Id为int时,pe设置为String?由于您的数据是在运行时提供的,请确保您将网格绑定到Page_Init事件中的数据,正如文章中所解释的那样。我确实在Init中绑定了数据,但不是在正确的时间。现在收到了。谢谢!它在标题上用作下拉筛选器吗?或者它在每行上显示下拉列表?