Get value from Telerik popup Form ASP.net
Thursday, April 1, 2010 2:34:49 PM
Cách Tạo popup trong ASP.net với Telerik lấy giá trị từ popup trả về mainForm
Trang chính *.jspx:
Ta sử dụng các hàm javascript sau:
<script language="javascript" type="text/javascript" >
//Hàm trả về kết quả từ popup được định nghĩa khi khai báo RadWindow
function CloseMaLoaiDuToan(oWnd, args) {
//get the transferred arguments
var arg = args.get_argument();
if (arg) {
var maLoaiDuToan = arg.txtMaLoaiDuToan;
//Cái ctl00_ContentPlaceHolder1_txtMaLoaiDT này là của TextBox
đã được biên dịch ra HTML rồi nên phải view suorce mới thấy đc (jscrpt củ chuối :p)
document.getElementById("ctl00_ContentPlaceHolder1_txtMaLoaiDT").value = maLoaiDuToan;
}
}
//Hàm gọi tới sự kiện mở popup khi click vào button
function openMaLoaiDuToan() {
var oWnd = radopen("popupLoaiDuToan.aspx", "RadWindow1");
}
</script>
Ta khai báo các popup ở đây :
<fieldset>
<telerik:RadFormDecorator ID="RadFormDecorator2" runat="server" Skin="Sunset" />
<telerik:RadWindowManager ID="RadWindowManager1" ShowContentDuringLoad="false" VisibleStatusbar="false"
ReloadOnShow="true" runat="server" Skin="Sunset">
<Windows>
<telerik:RadWindow ID="RadWindow1" Modal="true" AutoSize="true" OnClientClose="CloseMaLoaiDuToan"
NavigateUrl="popupPhongBan.aspx">
</telerik:RadWindow>
</Windows>
</telerik:RadWindowManager>
</div>
</fieldset>
Sự kiện popup được gọi khi click vào button:
<asp:Button id="cmdMaLoaiDT" runat="server" Width="25px" Text="..."
OnClientClick="javascript:openMaLoaiDuToan(); return false;" TabIndex="3">
</asp:Button></td>
//----------------------------------------------------------------------------
Tạo 1 trang jspx như bình thường cho popup
Trong file popup :
*.jspx :
Ta sử dụng các hàm javascript sau (cho vào codeblock):
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
<script type="text/javascript" >
//Hàm lấy giá trị của RadWinDow ta đang giữ
function GetRadWindow() {
var oWindow = null;
if (window.radWindow) oWindow = window.radWindow;
else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow;
return oWindow;
}
function AdjustRadWidow() {
setTimeout(function() { GetRadWindow().autoSize(true) }, 500);
}
//Hamf trar vef gias trị cho form chinhs từ popup
function returnToParent(maLoaiDuToan) {
//create the argument that will be returned to the parent page
var oArg = new Object();
//biến này sẽ được trả về cho txtmaloaidutoan của form chính
oArg.txtMaLoaiDuToan = maLoaiDuToan;
//get a reference to the current RadWindow
var oWnd = GetRadWindow();
//Close the RadWindow and send the argument to the parent page
oWnd.close(oArg);
}
</script>
</telerik:RadCodeBlock>
Giả sử ta muốn lấy giá trị của một record được bin trên 1 dòng của Grid ta làm như sau :
Tạo một cột là GridButtonColumn ButtonType="LinkButton" có thể cho thêm hình ảnh vào cho đẹp (:D)
<telerik:RadGrid ID="grvLoaiDT" runat="server" OnItemDataBound="grvLoaiDT_ItemDataBound"
AllowSorting="True" AutoGenerateColumns="False" GridLines="None"
Skin="Sunset"
ShowFooter="True"
PageSize="10" AllowPaging="True" >
<PagerStyle Mode="NextPrevAndNumeric" />
<MasterTableView width="100%" commanditemdisplay="Top" datakeynames="Id"
horizontalalign="NotSet" autogeneratecolumns="False">
<RowIndicatorColumn>
<HeaderStyle Width="20px"></HeaderStyle>
</RowIndicatorColumn>
<ExpandCollapseColumn>
<HeaderStyle Width="20px"></HeaderStyle>
</ExpandCollapseColumn>
<Columns>
<telerik:GridButtonColumn UniqueName="BtnReturn" ButtonType="LinkButton" HeaderText="Chọn"
Text="<img src='/Images/apply.gif' border='0'>" >
</telerik:GridButtonColumn>
<telerik:GridBoundColumn DataField="MaLoaiDuToan" HeaderText="Mã Loại"
UniqueName="MaLoaiDuToan" >
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="TenDuToan" HeaderText="Tên Loại Dự Toán"
UniqueName="TenDuToan">
</telerik:GridBoundColumn>
</Columns>
</MasterTableView>
<ClientSettings EnableRowHoverStyle="true">
<Selecting AllowRowSelect="True" />
</ClientSettings>
</telerik:RadGrid>
Ta nhúng mã script vào linkButton trong file codebehide *.cs của popup như sau để gọi sự kiện click và trả về giá trị cho mainForm:
protected void grvLoaiDT_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
GridDataItem item = (GridDataItem)e.Item;
LinkButton lnkbtn = (LinkButton)item["BtnReturn"].Controls[0];
//Lấy giá trị của dòng mà bạn muốn và truyền vào returnToParent
String maLoaiDuToan = (e.Item as GridDataItem)["MaLoaiDuToan"].Text;
lnkbtn.Attributes.Add("onClick", "return returnToParent('" + maLoaiDuToan + "')");
}
}
------------------------Have fun & Good Luck ! :D------------------------------------------














Unregistered user # Tuesday, May 25, 2010 7:14:51 AM
Thanh BinhThanhBinhBlog # Wednesday, May 26, 2010 5:02:48 PM
Unregistered user # Tuesday, May 10, 2011 8:39:23 AM
Unregistered user # Monday, December 5, 2011 1:39:55 AM