【问题标题】:Get the RadComboBox in CommandItemTemplate on Page_Load获取 Page_Load 上 CommandItemTemplate 中的 RadComboBox
【发布时间】:2015-01-20 10:38:24
【问题描述】:

我正在尝试在 Page_Load 上的 CommandItemTemplate 中获取 RadComboBox [Cmb_Lst_Sel]。从 RadComboBox [Cmb_Lst_Sel] 获得列表 ID [lst_ids] 后,我将这些 ID 传递给 SqlDataSource 以过滤和重新绑定 RadGrid [Grd_Url]。但我收到错误,无法获得对 RadComboBox [Cmb_Lst_Sel] 的引用。

我做错了什么?

ASPX Code:
------------------------------------------------------------------------------
<telerik:RadGrid ID="Grd_Url" runat="server" GridLines="None" AllowSorting="true" AllowPaging="true" PageSize="50"
    AllowFilteringByColumn="true" AutoGenerateColumns="False" AllowMultiRowSelection="true" AllowMultiRowEdit="true"
    AllowAutomaticInserts="True" AllowAutomaticUpdates="True" AllowAutomaticDeletes="True" 
    DataSourceID="Sql_Url" Width="100%">
    <SortingSettings SortToolTip=""/>
    <FilterItemStyle Width="100%"></FilterItemStyle>
    <GroupingSettings CaseSensitive="false"></GroupingSettings>
    <PagerStyle AlwaysVisible="true" Mode="NextPrevAndNumeric"/>
    <MasterTableView DataKeyNames="url_id" CommandItemDisplay="Top" EditMode="InPlace" InsertItemPageIndexAction="ShowItemOnCurrentPage"
        GroupLoadMode="Client" GroupsDefaultExpanded="true" TableLayout="Fixed" Width="100%">
        <GroupByExpressions>
            <telerik:GridGroupByExpression>
                <SelectFields>
                    <telerik:GridGroupByField FieldName="lst_name"></telerik:GridGroupByField>
                    <telerik:GridGroupByField FieldName="lst_sort"></telerik:GridGroupByField>
                </SelectFields>
                <GroupByFields>
                    <telerik:GridGroupByField FieldName="lst_sort" SortOrder="Ascending"></telerik:GridGroupByField>
                    <telerik:GridGroupByField FieldName="lst_name" SortOrder="Ascending"></telerik:GridGroupByField>
                </GroupByFields>
            </telerik:GridGroupByExpression>
        </GroupByExpressions>
        <CommandItemTemplate>
        <div id="Div_Tlb_Fixed">
            <telerik:RadToolBar ID="Tlb_Url" runat="server" EnableImageSprites="true"
                OnButtonClick="CsTlbClick" OnClientButtonClicking="jsTlbUrl">
                <Items>
                    <telerik:RadToolBarButton CommandName="Toggle" PostBack="false" ToolTip="Expand/Collapse Folders"
                        CssClass="Btn_ToggleN" HoveredCssClass="Btn_ToggleH"
                        CheckOnClick="true" AllowSelfUnCheck="true" Group="T">
                    </telerik:RadToolBarButton>

                    <telerik:RadToolBarButton CommandName="Clear" PostBack="false" ToolTip="Clear Website Selection"
                        CssClass="Btn_ClearN" HoveredCssClass="Btn_ClearH">
                    </telerik:RadToolBarButton>
                </Items>
            </telerik:RadToolBar>
            <telerik:RadComboBox ID="Cmb_Lst_Sel" runat="server" DataTextField="lst_name" CheckBoxes="true"
                DataValueField="lst_id" AutoPostBack="True" EnableCheckAllItemsCheckBox="true" 
                DataSourceID="Sql_Lst" Width="20%">
                <Items>
                    <telerik:RadComboBoxItem Text="All" Value="" Selected="true"></telerik:RadComboBoxItem>
                </Items>
            </telerik:RadComboBox> 
        </div>
        </CommandItemTemplate>
        <Columns>
            <%--Some Columns here--%>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>

<asp:SqlDataSource ID="Sql_Lst" runat="server" OnSelecting="CsSqlSelectingCmb"
ConnectionString="<%$ ConnectionStrings:Con_Str %>"
    SelectCommand="SELECT [lst_id], [lst_name] 
                   FROM [t_Lists] 
                   WHERE [usr_id] = @usr_id 
                   ORDER BY [lst_sort]">
    <SelectParameters>
        <asp:Parameter Name="usr_id"/>
    </SelectParameters>
</asp:SqlDataSource>


C# Code:
------------------------------------------------------------------------------

    public partial class Cls_Url : System.Web.UI.UserControl
    {
        protected void Page_Load(object s, EventArgs e)
        {
            // Grab the RadComboBox in CommandItemTemplate on Page_Load
            CsSqlSelect(s, e);
        }

        protected void CsSqlSelect(object s, EventArgs e)
        {
            // I get error for the 2 lines below and cannot get a reference to the RadComboBox [Cmb_Lst_Sel]
            // What am I doing wrong?
            GridItem cmdItem = Grd_Url.MasterTableView.GetItems(GridItemType.CommandItem)[0];
            RadComboBox cmbLst = (RadComboBox)cmdItem.FindControl("Cmb_Lst_Sel");

            if (cmbLst.CheckedItems.Count > 0)
            {
                var items = cmbLst.CheckedItems;
                string lst_ids = "";

                foreach (var item in items)
                {
                    lst_ids += "'" + item.Value + "'" + ",";
                }

                lst_ids = lst_ids.Remove(lst_ids.Length - 1);
            }

            // Once I have the list ids [lst_ids] from the RadComboBox [Cmb_Lst_Sel], 
            // I pass these IDs to SqlDataSource to filter and rebind the RadGrid [Grd_Url]
        }

        protected void CsTlbClick(object s, RadToolBarEventArgs e)
        {
        }

        protected void CsSqlSelectingCmb(object s, SqlDataSourceCommandEventArgs e)
        {
            e.Command.Parameters["@usr_id"].Value = Membership.GetUser(HttpContext.Current.User.Identity.Name).ProviderUserKey;
        }

    } 

------------------------------------------------------------------------------

【问题讨论】:

    标签: c# asp.net telerik radgrid radcombobox


    【解决方案1】:

    我建议在 RadGrid Grd_Url OnItemCreated 上添加一个事件,然后使用您的函数。

        protected void Grd_Url_OnItemCreated(object sender,GridItemEventArgs e)
        {
           if(e.Item is GridEditableItem))
              CsSqlSelect(sender, e);
        }
    

    并编辑您的函数:

        protected void CsSqlSelect(object s, GridItemEventArgs e)
        {
            GridEditableItem cmdItem = e.Item as GridEditableItem;
            RadComboBox cmbLst = (RadComboBox)cmdItem.FindControl("Cmb_Lst_Sel");
    
            if (cmbLst.CheckedItems.Count > 0)
            {
                var items = cmbLst.CheckedItems;
                string lst_ids = "";
    
                foreach (var item in items)
                {
                    lst_ids += "'" + item.Value + "'" + ",";
                }
    
                lst_ids = lst_ids.Remove(lst_ids.Length - 1);
            }
    
            // Once I have the list ids [lst_ids] from the RadComboBox [Cmb_Lst_Sel], 
            // I pass these IDs to SqlDataSource to filter and rebind the RadGrid [Grd_Url]
        }
    

    【讨论】:

    • 感谢您的回复,但我的问题是如何在 Page_Load 上的 CommandItemTemplate 中找到 RadComboBox [Cmb_Lst_Sel]?我不喜欢使用 OnItemCreated 来提高性能,因为它会在任何时候创建项目时被调用。
    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多