[VB.NET] Passing value from popup window : การส่งค่าจาก Popup Window กลับไปยัง Form ที่อยู่อีก Window
posted on 14 Aug 2009 12:47 by veeza in Programming
วันนี้จะมาเขียนเกี่ยวกับ Programming อีกแล้ว ขอบอกก่อนเลยว่าผู้เขียนไม่ได้เรียนการเขียนโปรแกรมมาโดยตรง แต่อาศัยซื้อหนังสือมาอ่าน และลองผิดลองถูกไปเรื่อย อาจจะใช้ศัพท์ทางโปรแกรมไม่ถูกต้องก็ขออภัยด้วยนะครับ
พอดีไปเจอบทความ Passing value from popup window to parent form's TextBox
by mbanavige จาก asp.net เห็นว่า Code ไม่ยาก และสามารถนำไปประยุกต์ใช้ได้หลากหลายเลยนำมาฝากกันครับ
Passing value from popup window to parent form's TextBox
แปลตามความเข้าใจก็คือ การส่งค่าจาก Popup Window กลับไปยัง Form ที่อยู่อีก Window โดย Form ที่รับค่าจะต้องมี MasterPage ด้วยนะครับ
เิปิด Microsoft Visual Studio 2005 แล้วเลือก New Web Site... [ถ้าใครมี Web Site อยู่แล้วก็ข้ามขั้นตอนนี้ไปได้เลยนะครับ]

แล้วให้เลือก ASP.NET Web Site ครับ

ให้ New File... ขึ้นมา [Ctrl+N ก็ได้ครับ]

ให้ New File... ขึ้นมา [Ctrl+N ก็ได้ครับ] ด้วยการสร้าง Master Page ขึ้นมาก่อน

ให้ New File... ขึ้นมา [Ctrl+N ก็ได้ครับ] ด้วยการสร้าง Master Page ขึ้นมาก่อน

คราวนี้ให้ New File... ขึ้นมา เป็น Web Form นะครับ ตั้งชื่อว่า Parent.aspx และอย่าลืมติ๊กเลือก Select MasterPage ด้วยนะครับ

สร้าง TextBox, สร้าง Button ขึ้นมาก่อน

<script type="text/javascript">
function OpenPopup() {
// ใส่ Script window.open เพื่อให้ Popup.asp เปิดขึ้นมา
window.open("Popup.aspx","List","scrollbars=no,resizable=no,width=530,height=300");
return false;
}
</script>
<asp:TextBox ID="TextBox1" Runat="server" />
<asp:Button ID="Button1" Runat="server" Text="Category" />
</asp:Content>
ในส่วนของ Source Code หน้า Perent.aspx.vb
If Not IsPostBack Then
'--- คลิ๊กปุ่ม Button เรียกใช้ฟังก์ชั่น OpenPopup
Me.Button1.Attributes.Add("onclick", "javascript:return OpenPopup()")
End If
End Sub
ให้ New File... ขึ้นมา เป็น Web Form ตั้งชื่อว่า Popup.aspx ครับ 
สร้าง AccessDataSource และ GridView ในส่วน AccessDataSource ใช้ Database NorthWind.mdb* เลือก Table Category
*NorthWind.mdb หาได้จาก C:\Program Files\Microsoft Office\OFFICE11\SAMPLES
จากตัวอย่างผมได้สร้าง Folder db เพื่อเก็บ NorthWind.mdb

<script language="javascript">
function GetRowValue(val) {
// สร้างฟังก์ชั่นการคืนค่ากลับ
// อย่าลืม ContentPlaceHolder1 และ TextBox1 ต้องให้ตรงกันนะครับ window.opener.document.getElementById("ctl00_ContentPlaceHolder1_TextBox1").value = val;
window.close();
}
</script>
<div>
<%-- อย่าลืมสร้าง Folder db เพื่อเก็บ Northwind.mdb ก่อนนะครับ --%>
<asp:AccessDataSource ID="AccessDataSource1" runat="server" dataFile="db/Northwind.mdb"
SelectCommand="SELECT [CategoryName], [Description] FROM [Categories]">
</asp:AccessDataSource>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="AccessDataSource1" CellPadding="4" ForeColor="#333333" GridLines="None">
<Columns>
<%-- สร้าง TemplateField --%>
<asp:TemplateField>
<ItemTemplate>
<%-- สร้าง Button ใน ItemTemplate --%>
<asp:Button ID="btnSelect" runat="server" Text="Select" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="CategoryName" HeaderText="Category" SortExpression="CategoryName" />
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
</Columns>
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#999999" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>
</div>
</form>
ในส่วนของ Source Code หน้า Popup.aspx.vb
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If (e.Row.RowType = DataControlRowType.DataRow) Then
DirectCast(e.Row.FindControl("btnSelect"), Button).Attributes.Add("onclick", "javascript:GetRowValue('" & e.Row.Cells(1).Text & "')")
'--- Cells(1) = คอลัมภ์ที่ 2 (ส่งค่า Category กลับไปยัง Form)
End If
End Sub
ทดสอบโปรแกรม เมื่อทำการกดปุ่ม Category จะมี Popup window ขึ้นมา และมีปุ่ม Select ให้เลือกค่า Category ไปใส่ยัง Form 
เลือก Category Beverges มีการส่งค่าคืนมายัง Form แล้ว
ขอจบเท่านี้นะครับใครติดตรงไหนก็ฝากไว้ใน Comment ได้นะครับ เดี๋ยวจะช่วยหาคำตอบให้นะครับ ....ขอบคุณครับ 

#1 By นู๋โคลซ แห่งบ้านหูยาว on 2009-08-14 18:17