簡體   English   中英

從GridTemplateColumn中的超鏈接字段打開RadWindow

[英]Opening a RadWindow from a hyperlink field in a GridTemplateColumn

我的父頁面上有一個RadGrid,其中的GridTemplateColumn包含一個ASP超鏈接字段。 在網格的ItemDataBound事件中,我正在執行以下操作以打開RadWindow內部的頁面(窗口內部的頁面負責所有邏輯):

hyperlink.Attributes.Add("onclick", string.Format("openDialogWindow({0}, '{1}', '{2}');", productId, categoryId, typeId));

這是用於在窗口內打開頁面的JavaScript函數:

function openDialogWindow(productId, categoryId, typeId) {
    openRadWindow("DialogPage.aspx?ProductId=" + productId + "&CategoryId=" + categoryId + "&TypeId=" + typeId, "dialog title", 800, 600);
}

與其這樣做,我不喜歡在其父模板的內容模板內部添加帶有用戶控件的RadWindow。 用戶控件將顯示DialogPage.aspx所做的一切。 父頁面將設置控件的所有必要屬性(productId,categoryId,typeId),因此,當窗口打開時,將根據單擊超鏈接按鈕的網格單元格顯示適當的信息。

這樣的事情可能嗎? 或者正在創建在RadWindow中打開的單獨頁面,並將查詢字符串參數傳遞給它是執行此操作的最佳方法。 這就是我目前的情況。

請嘗試使用以下代碼段。

WebForm1.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="TelerikWebApp1.WebForm1" %>

<%@ Register TagPrefix="uc" TagName="usercontrol" Src="~/WebUserControl1.ascx" %>
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
    <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
        <script type="text/javascript">

        </script>
    </telerik:RadCodeBlock>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <telerik:RadScriptManager ID="RadScriptManager1" runat="server"></telerik:RadScriptManager>
            <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
                <AjaxSettings>
                    <telerik:AjaxSetting AjaxControlID="RadGrid1">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                            <telerik:AjaxUpdatedControl ControlID="RadWindow1" />
                        </UpdatedControls>
                    </telerik:AjaxSetting>
                </AjaxSettings>
            </telerik:RadAjaxManager>
            <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server"></telerik:RadAjaxLoadingPanel>
            <telerik:RadWindowManager ID="RadWindowManager1" runat="server">
            </telerik:RadWindowManager>
            <telerik:RadWindow ID="RadWindow1" runat="server">
                <ContentTemplate>
                    <uc:usercontrol ID="usercontrol1" runat="server" />
                </ContentTemplate>
            </telerik:RadWindow>
            <telerik:RadGrid ID="RadGrid1" runat="server" OnNeedDataSource="RadGrid1_NeedDataSource"
                AutoGenerateColumns="false">
                <MasterTableView>
                    <Columns>
                        <telerik:GridBoundColumn DataField="ID" UniqueName="ID" HeaderText="ID">
                        </telerik:GridBoundColumn>
                        <telerik:GridTemplateColumn>
                            <ItemTemplate>
                                <asp:Button ID="Button1" Text="Button1" runat="server" OnClick="Button1_Click" />
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>
                    </Columns>
                </MasterTableView>
            </telerik:RadGrid>
        </div>
    </form>
</body>
</html>

WebForm1.aspx.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;

namespace TelerikWebApp1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object source, System.EventArgs e)
        {

        }

        protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
        {
            dynamic data = new[] {
        new { ID = 1, Name ="Name1"},
        new { ID = 2, Name ="Name2"} };
            RadGrid1.DataSource = data;
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Button Button1 = sender as Button;
            GridDataItem item = Button1.NamingContainer as GridDataItem;
            string strID = item["ID"].Text;
            (usercontrol1.FindControl("Label1") as Label).Text = strID;
            RadWindow1.VisibleOnPageLoad = true;
        }


    }
}

WebUserControl1.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="TelerikWebApp1.WebUserControl1" %>
<asp:Label ID="Label1" runat="server"></asp:Label>

讓我知道是否有任何問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM