在RadGrid中使用GridDropDownColumn

时间:2015-04-16 12:21:48

标签: c# webforms telerik telerik-grid radgrid

我有telerik的RadGrid有四列:

<telerik:RadGrid ID="CountryConstraintsGrid" runat="server" OnNeedDataSource="CountryConstraintsGrid_NeedDataSource"
                    OnItemDataBound="CountryConstraintsGrid_ItemDataBound" OnDeleteCommand="CountryConstraintsGrid_DeleteCommand" Width="50%">
    <MasterTableView AutoGenerateColumns="false" DataKeyNames="cntry_id,inv_limit_num">
        <Columns>
            <telerik:GridDropDownColumn UniqueName="CountryConstraintsListColumn" ListDataMember="Countries" ListTextField="name" ListValueField="cntry_id" HeaderText="Country" DataField="cntry_id" 
                                        DropDownControlType="RadComboBox" EnableEmptyListItem="true" EmptyListItemText="None Selected" EmptyListItemValue="">
            </telerik:GridDropDownColumn>
            <telerik:GridBoundColumn HeaderText="<%$ Resources:LabelStrings, DealAccess.NumberOfInvestors %>" DataField="inv_limit_num" DataType="System.Int32">
            </telerik:GridBoundColumn>

            <telerik:GridEditCommandColumn UniqueName="EditColumn" ButtonType="ImageButton" EditImageUrl="images/edit.gif">
            </telerik:GridEditCommandColumn>
            <telerik:GridButtonColumn UniqueName="DeleteColumn" ButtonType="ImageButton" CommandName="Delete" ImageUrl="images/delete.gif">
            </telerik:GridButtonColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>

服务器端:

protected void CountryConstraintsGrid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    CountryConstraintsGrid.DataSource = CountryConstraints;
}

protected void CountryConstraintsGrid_ItemDataBound(object sender, GridItemEventArgs e)
{        
}

protected void CountryConstraintsGrid_DeleteCommand(object sender, GridCommandEventArgs e)
{
    var deletedCountryID = (int)(((GridDataItem)e.Item).GetDataKeyValue("cntry_id"));
    CountryConstraints.RemoveAll(countryConstraint => countryConstraint.cntry_id == deletedCountryID);
}

CountryConstrains是项目的集合,每个项目都有fieds:cntry_idcntry_nminv_limit_num

Country包含字段:cntry_idname

所以,我有country constraints项的集合,我想构建网格,列是字符串和图像,但在编辑过程中,前两个字段是:RadComboBox和Input ['text']。 第二个字段工作正常,但我不明白如何将数据绑定到RadComboBoxes。 RadComboBox的所有可能值都位于Countries项中(它不直接连接到CountryContstaint,但它们具有相同的字段cntry_id)。

我试图谷歌解决这些问题(telerik's exampledocumentations)以及论坛中的所有话题,而我却无法理解如何使其发挥作用。

任何人都可以帮助我并解释如何以正确的方式使用GridDropDownColumn吗?

P.S。我知道,例如,可以将DataSourceID与SQL源一起使用,但我只想从服务器端的变量中加载列表。

1 个答案:

答案 0 :(得分:1)

您可以访问ItemDataBound或ItemCreated中的下拉列表。目前我们有相同的场景,我们在ItemDataBound中实现了它。这是我们的代码示例,从VB转换为C#。

GridEditableItem editItem = (GridEditableItem) e.Item;
RadComboBox combo = (RadComboBox) editItem("CountryConstraintsListColumn").Controls(0);
combo.DataTextField = "name";
combo.DataValueField = "cntry_id";
combo.DataSource = SOURCE;
combo.DataBind();

您只需获取每个下拉列表的源代码并将其连接到控件。可能会有一些额外的行来获取已存储在那里的数据。

我们只是根据项目和列获取相应的控件,我们正在附加源代码。

希望它有所帮助。