Telerik网格客户端行选择

时间:2011-04-11 16:00:14

标签: c# asp.net ajax telerik

我已经在Stackoverflow和Telerik上彻底研究了这些问题,但仍然没有找到解决这些问题的方法。这就是我想要做的。我有一个使用Linq数据绑定的RadGrid控件。基于用户的行选择,我想从数据库中查询其他信息并将其放入另一个控件(假设其他控件暂时是Rad Listview)。我想在所有客户端执行此操作,而无需将整个页面发回服务器。另外,我试图在页面上放一个按钮,将行选择发送回服务器,以触发代码隐藏中的某些操作。

如果有人能告诉我如何做以下事情,我会喜欢它:

  1. 使用Javascript获取用户行选择并在另一个控件中填充该选择中的键值(使用Telerik客户端行选择,而不是通常的asp.net选择链接)
  2. 使用上一个问题中的键值发出Ajax请求,以从数据库中检索一些其他信息。我假设我将在服务器端使用Linq来处理此请求。刷新另一个控件以显示该信息。
  3. 在页面上放置一个按钮,将第一个问题的键值发送回服务器,然后将其捕获并存储在变量中。
  4. 我意识到上面的1-3项中存在相当多的重叠,但我希望通过像我一样突破它,我将能够更好地理解客户端和服务器端代码如何在asp中交互的机制。 net + telerik环境。

    以下是我发现的一些相关帖子:

    //我发布其他链接,我的SO声誉得分不允许我这样做

    这是我页面上的一些代码。我网格中的相关键值是包标签。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    

             

                                                   这是标题                      
         <!-- Begin Navigation --> 
         <div id="navigation"> 
    
               This is the Navigation        
    
         </div> 
         <!-- End Navigation --> 
    
         <!-- Begin Faux Columns --> 
         <div id="faux"> 
    
               <!-- Begin Left Column --> 
               <div id="leftcolumn"> 
    
                     This is the left column
    
                     <telerik:RadTreeView ID="RadTreeView1" Runat="server" Skin="Telerik">
                         <Nodes>
                             <telerik:RadTreeNode runat="server" Expanded="True" Text="My Account">
                                 <Nodes>
                                     <telerik:RadTreeNode runat="server" Text="Inventory">
                                     </telerik:RadTreeNode>
                                     <telerik:RadTreeNode runat="server" Text="Protection Plan">
                                     </telerik:RadTreeNode>
                                     <telerik:RadTreeNode runat="server" Text="Addresses">
                                     </telerik:RadTreeNode>
                                     <telerik:RadTreeNode runat="server" Text="Profile">
                                     </telerik:RadTreeNode>
                                     <telerik:RadTreeNode runat="server" Text="Alert Preferences">
                                     </telerik:RadTreeNode>
                                 </Nodes>
                             </telerik:RadTreeNode>
                             <telerik:RadTreeNode runat="server" Text="Supplies">
                             </telerik:RadTreeNode>
                         </Nodes>
                     </telerik:RadTreeView>
    
               </div> 
               <!-- End Left Column --> 
    
               <!-- Begin Content Column --> 
               <div id="content"> 
    
                    This is the main body where the inventory stuff goes
    
                    <form id="form1" runat="server">
    <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
        <Scripts>
            <%--Needed for JavaScript IntelliSense in VS2010--%>
            <%--For VS2008 replace RadScriptManager with ScriptManager--%>
            <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
            <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
            <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />
        </Scripts>
    </telerik:RadScriptManager>
    <script type="text/javascript">
        //Put your JavaScript code here.
    </script>
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
    </telerik:RadAjaxManager>
    <div>
    
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <telerik:RadTabStrip ID="RadTabStrip1" runat="server" 
            ontabclick="RadTabStrip1_TabClick" SelectedIndex="2" AutoPostBack="True" 
            Skin="Vista">
            <Tabs>
                <telerik:RadTab runat="server" Text="Pending">
                </telerik:RadTab>
                <telerik:RadTab runat="server" Text="In Storage">
                </telerik:RadTab>
                <telerik:RadTab runat="server" Text="Returned" Selected="True">
                </telerik:RadTab>
            </Tabs>
        </telerik:RadTabStrip>
    
    
        <telerik:RadGrid ID="RadGrid1" runat="server" AllowSorting="True" 
            CellSpacing="0" GridLines="None" AutoGenerateColumns="False" 
            Skin="Vista" Width="654px">
            <ClientSettings>
                <Selecting AllowRowSelect="True" />
                <Scrolling AllowScroll="True" UseStaticHeaders="True" />
                <ClientEvents OnGridCreated="GridCreated" OnRowSelected="RowSelected"></ClientEvents>
            </ClientSettings>
    

    <Columns>
        <telerik:GridClientSelectColumn FilterControlAltText="Filter column column" 
            UniqueName="column0" CommandName="SelectRow">
        </telerik:GridClientSelectColumn>
        <telerik:GridBoundColumn DataField="Tag" 
            FilterControlAltText="Filter column2 column" HeaderText="Tag" 
            UniqueName="column1">
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Name" 
            FilterControlAltText="Filter column3 column" HeaderText="Name" 
            UniqueName="column3">
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Received" DataType="System.DateTime" 
            EmptyDataText="Not Received" FilterControlAltText="Filter column4 column" 
            HeaderText="Received" UniqueName="column4" DataFormatString="{0:MM/dd/yy}">
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn DataField="Shipped" EmptyDataText="In Storage" 
            FilterControlAltText="Filter column5 column" HeaderText="Shipped" 
            UniqueName="column5" DataFormatString="{0:MM/dd/yy}">
        </telerik:GridBoundColumn>
        <telerik:GridRatingColumn FilterControlAltText="Filter column1 column" 
            HeaderText="Condition" ItemCount="3" UniqueName="column1">
        </telerik:GridRatingColumn>
    </Columns>
    

            <SelectedItemStyle BackColor="White" />
    

            

1 个答案:

答案 0 :(得分:1)

如果您正在谈论真正的客户端脚本,网格应该将选择传递给Web服务,并通过其客户端API填充下一个控件(如果RadListView支持客户端绑定,我是不确定它确实如此)。这绝对是可能的,但比下面的解决方案要多得多。但是:

如果你想回发到服务器,为什么要在客户端填充listview?任何客户端填充的数据都会丢失(因为它不存储在viewstate中),因此如果要回发到服务器以存储变量,则客户端绑定无效。自从你做telerik以来最简单的方法是在网格上设置ClientSettings.EnablePostBackOnRowClick="true",在标记或代码中设置ClientSettings.Selecting.AllowRowSelect="true"。然后,将这两个控件包装在RadAjaxPanel中,这样当回发发生时,您可以通过代码处理它。

当点击网格的行时,它会回发,事件全部在服务器端工作,值存储在你的变量中(只要它存储在session,cache,viewstate中),然后就可以了填充列表视图。

HTH。