【问题标题】:Binding GridViewComboBoxColumn to a datasource at Page_Load在 Page_Load 将 GridViewComboBoxColumn 绑定到数据源
【发布时间】:2014-05-12 13:02:57
【问题描述】:

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

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

    gridColumn.PropertiedropsComboBox.DataSource = DataSourceMadeUpOfAList;
    gridColumn.PropertiesComboBox.TextField = "SpelledOutNumbers";
    gridColumn.PropertiesComboBox.ValueField = "ActualNumbers";
...

我看过这里:Binding GridViewComboBoxColumn to a datasource

这确实有效,但仅限于编辑表单。我启用了过滤器行,并且还需要填充这些下拉列表。上述解决方案不适用于过滤器(原因很明显)。任何想法都表示赞赏。

谢谢。

【问题讨论】:

    标签: devexpress aspxgridview


    【解决方案1】:

    此代码在这里可以正常工作。请确保 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; }
        }
    

    【讨论】:

    • 我在当前项目中复制了这个解决方案,但它不起作用。当我走过 Page_Load 并越过 TextField 设置时,我观察了数据,并且 Items 的计数为 0。数据位于网格列的 DataSource 中,但看起来好像数据实际上没有绑定到列。除了项目之外,唯一真正的区别是我的网格中没有 DataSourceID,因为我的数据是在后面的代码中提供的。
    • 另外,如果ValueType要匹配ValueField,为什么Id为int时ValueType设置为String?
    • 由于您的数据是在运行时提供的,因此请确保将网格绑定到 Page_Init 事件中的数据,如devexpress.com/Support/Center/kb/p/K18183.aspx 文章中所述
    • 我确实在初始化中绑定了我的数据,但不是在正确的时间。现在明白了。谢谢!
    • 它是否可以作为标题的下拉过滤器?还是在每一行显示下拉菜单?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2010-09-26
    • 2013-02-15
    相关资源
    最近更新 更多