Copyright © 2003-2009
By Suthep Sangvirotjanaphat
  Mobile: 089-967-2200, 081-915-7816
Phone: 0-2992-4877   Fax: 0-2992-4878
Fast Contact Us

GreatFriends.Biz Community

Custom Search
Copy เพื่ออ้างอิงถึงข้อความนี้:
 MESSAGE #63505 (อ่าน 5,788 ครั้ง)

ขอถามเรื่อง messagebox in asp.net หน่อยคับ

คืออยากจะทำให้มีการ show messagebox แบบให้มี ตอบ yes no  คือ ตอนนี้ ที่ใช้อยู่คือ msgbox  แต่ว่า บางที แทนที่มันจะขี้นมาอยู่ หน้า Page เพื่อให้ User เห็น บางทีมันเด้งมาจิง แต่ว่าไม่ขี้นมาโชว์อะคับ ไม่ทราบว่า การแจ้งเตือน ให้ ผุ้ใช้ กด Yes no หรือ กด อะไรก็ตาม เค้าใช้ Control ตัวไหนกันคับ 

 
หรือใช้ จาว่าสคริป แล้วใช้ยังไงคับผม


khiang วันที่ส่ง: 9 ต.ค. 50 09:12 GMT+7
วันที่ปรับล่าสุด: 10 ต.ค. 50 14:56 GMT+7
REPLY #1 (63507)
ลองใช้แบบนี้ดูว่าตรงใจใหม.. 
 
...
if (!Page.IsPostBack)

{

        Button2.Attributes.Add("onclick", "javascript:return confirm('คุณต้องการบันทึกข้อมูล ใช่หรือไม่???...');");
}
...


nano วันที่ส่ง: 9 ต.ค. 50 09:29 GMT+7
วันที่ปรับล่าสุด: 9 ต.ค. 50 09:29 GMT+7
REPLY #2 (63508)

ใช้ javascript ครับ เพราะ MessageBox มันจะปรากฎบน Server เสมอ เผอิญตอนเขียนโปรแกรมเครื่องที่เขียนเป็น Web server ในตัว ดังนั้นจึงเห็นว่ามี Messagebox ขึ้นมา (แต่บางทีก็โชว์เป็นแค่ Icon บน Taskbar)

 
ดังนั้นใช้ window.alert() แทนครับ รายละเอียด search ในบอร์ดดูนะครับ เรื่องนี้ถาม-ตอบมาหลายรอบแล้วครับ


jnithi วันที่ส่ง: 9 ต.ค. 50 09:29 GMT+7
วันที่ปรับล่าสุด: 9 ต.ค. 50 09:29 GMT+7
REPLY #3 (63510)
ใช้ window.confirm แบบคุณ nano ถูกแล้วครับ ถ้าต้องการให้มี yes, no


jnithi วันที่ส่ง: 9 ต.ค. 50 09:31 GMT+7
วันที่ปรับล่าสุด: 9 ต.ค. 50 09:31 GMT+7
REPLY #4 (63513)

คุณ nano คับ คือว่า ผม งงมากเลยคับ เคยทำแต่ win app ใช้

 
messagebox.show("ต้องการลบข้อมูลหรือไม่","Confirm",messageboxbuttons.yesno)
 
 
แล้วเช็ค if(dialogresult.yes = true)
            {
                ...........
.......................
   
            }
 
 
คือถ้าเป็นแบบนี้คือเข้าใจอ่ะคับ แต่พอเป็นจาว่าสคริปแล้วผม งง มากเลยคับ ถ้าไม่เป็นการรบกวนมากเกินไป ขอคำอธิบาย จาว่าสคริปทีได้ไหมคับ
ประมาณว่าผมจะนำมาใช้กับโค๊ดด้านล่างนี่อะคับ ว่าจะยืนยันการลบหรือไม่อ่าคับ
 

If (Not GridView1.SelectedIndex = -1) Then

        Dim Po As String = GridView1.SelectedRow.Cells(1).Text

        Dim PoDelete As String = "Delete PO_BY where PO_BY ='" + Po + "'"

        conn.command(PoDelete)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  บรรทัดนี้ ลบออกแล้วคับ

        GridView1.DataBind()

End If



khiang วันที่ส่ง: 9 ต.ค. 50 10:07 GMT+7
วันที่ปรับล่าสุด: 9 ต.ค. 50 10:07 GMT+7
REPLY #5 (63524)
 
ตัวอย่างการใช้งานตามนี้ครับ
ASP.Net (VB.Net 2005)
1. บน GridView1 Edit Columns => Add TemplateField
2. Edit Templates => ลาก ImageButton1 มาวาง
    Properties ID = > ImageButton1
    Properties ImageUrl =>ใส่รูหตามต้องการ,
    Properties CommandName = > Imd_Del,
    Properties ToolTip = > ลบข้อมูล
 
3. Coding
 

Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated

        If e.Row.RowType = DataControlRowType.DataRow Then

            Dim _imgDel As ImageButton = CType(e.Row.FindControl("ImageButton1"), ImageButton)

            _imgDel.Attributes.Add("onclick", "javascript:return confirm('คุณต้องการบันทึกข้อมูล ใช่หรือไม่???...');")

            _imgDel.CommandArgument = e.Row.RowIndex.ToString()

 

        End If

    End Sub

 

 

 

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand 

        If (e.CommandName.Equals("Img_Del")) Then

            Dim ir As Integer = Convert.ToInt32(e.CommandArgument)

            Dim Po As String =  GridView1.Rows(ir).Cells(1).Text

                        Dim PoDelete As String = "Delete PO_BY where PO_BY ='" + Po + "'"

                        conn.command(PoDelete)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  บรรทัดนี้ ลบออกแล้วคับ

                        GridView1.DataBind()

        End If

    End Sub

 

 

GridView.RowCommand Event:

ศึกษาเพิ่มเติมจาก:> http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcommand.aspx

 

 



nano วันที่ส่ง: 9 ต.ค. 50 11:17 GMT+7
วันที่ปรับล่าสุด: 9 ต.ค. 50 11:17 GMT+7
REPLY #6 (63537)

แบบว่าผมอยากทราบ ที่เกี่ยวกับ  java script อ่าคับ  ว่า เวลาจะ delete แล้ว มันมี dialog มาให้ตอบ yes หรือ no อ่ะคับ ว่าเราจะเช็คยังไงว่า เค้าตอบ yes หรือ no มาอะคับ

 
อย่าง messagebox  ก็เช็ค จาก dialogresult ได้อ่ะคับ  แล้วนี่ผมจะเช็คยังไง
 
คือว่าถ้าตอบ yes ก็ให้ ทำงาน โค๊ดดังนี้อ่ะคับ
 

If (Not GridView1.SelectedIndex = -1) Then

        Dim Po As String = GridView1.SelectedRow.Cells(1).Text

        Dim PoDelete As String = "Delete PO_BY where PO_BY ='" + Po + "'"

        conn.command(PoDelete)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  บรรทัดนี้ ทำการลบข้อมูล

        GridView1.DataBind()

End If



khiang วันที่ส่ง: 9 ต.ค. 50 12:41 GMT+7
วันที่ปรับล่าสุด: 9 ต.ค. 50 12:41 GMT+7
REPLY #7 (63545)

ถ้าตอบ Yes ก็จะคืนค่ามาเป็น true ครับ นอกนั้นเป็น false หมด

อย่าง code
 
javascript:return confirm('คุณต้องการบันทึกข้อมูล ใช่หรือไม่???...')
 
ใน onclick ของปุ่ม
ก็ประมาณว่า ถ้า confirm ออกมา yes ปุ่มมันก็จะงานต่อไป


SuperTee วันที่ส่ง: 9 ต.ค. 50 13:08 GMT+7
วันที่ปรับล่าสุด: 9 ต.ค. 50 13:08 GMT+7
REPLY #8 (63549)
javascript มี function  confirm() ซึ่งเจ้า function confirm ()
ทำงานตาม ที่คุณ SuperTee ตอบ
ซึ่งถ้าเราต้องการ ให้ User confirm ในการทำงานบางอย่าง
สามารถใช้งาน  function  confirm() ได้เลยครับ
แต่การที่เราจะนำมาใช้ใน Code ของเราต้องมีวิธีการบางอย่าง
ซึ่ง  function  confirm() จะทำงาน ใน onclick ของปุ่ม ตามที่ คุณ SuperTee 
ได้ตอบแล้วนั้น เราจะทำอย่างไรให้มันอยู่ใน onclick ของปุ่มละ
 
ถ้าเป็น Button: เช่น เป็นปุ่ม  Save  ข้อมูล
syntax:
    Button2.Attributes.Add(Key String,Value String )
ตัวอย่าง:
    btSave.Attributes.Add("onclick", "javascript:return confirm('คุณต้องการบันทึกข้อมูล ใช่หรือไม่???...');");
การเขียน Code:
    Code ปกติครับดับเบิ้ลคลิกบน btSave เขียน Codeได้เลย
การทำงาน
    เมื่อ User กดปุ่ม btSave เจ้า javascript:return confirm('คุณต้องการบันทึกข้อมูล ใช่หรือไม่???...')  จะทำงานโดย
    มี dialog ขึ้นมี Message ตามที่เราใส่ไปใน function และมีปุ่ม Yes , No ให้ User confirm ถ้าตอบ Yes มันจะ Return True
    และเข้ามาทำงานภายใน Code ที่เราเขียนในปุ่ม btSave ถ้า User ตอบ No มันจะ reutn false และไม่เข้ามาทำงานใน Code ของเรา
 
ถ้าเป็นบน GridView เราจะ Add Attributes "onclick" เข้าไปในแต่ละ Rows อย่างไร
ให้ทำตาม REPLY #5 (63524)
การทำงาน
    เหมือนกันกับ Button ครับ
 
ลองดูครับ
 
 


nano วันที่ส่ง: 9 ต.ค. 50 13:43 GMT+7
วันที่ปรับล่าสุด: 9 ต.ค. 50 13:43 GMT+7
REPLY #9 (63581)

แล้วตัว   btSave.Attributes.Add("onclick", "javascript:return confirm('คุณต้องการบันทึกข้อมูล ใช่หรือไม่???...');");

 
เราเอาไปไว้ ใน ส่วน behine code  ส่วน Pageload ใช่หรือป่าวคับ หรือว่าไว้ตรงไหน หรือไว้ ใน btSave_Click เลยคับ
 
แล้วถ้า Dialog ขี้นมา ผมอยากให้ Default อยู่ที่ Cancel ได้หรือป่าวคับ  กลัว User  กด Enter รัวๆ อ่าคับ


khiang วันที่ส่ง: 9 ต.ค. 50 15:53 GMT+7
วันที่ปรับล่าสุด: 9 ต.ค. 50 15:53 GMT+7
REPLY #10 (63606)
ใว้ใน Pageload ครับ
 
 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

 

If Not Page.IsPostBack Then    

    Button1.Attributes.Add("onclick", "javascript:return confirm('คุณต้องการข้อลบมูล ใช่หรือไม่???...');")

End If

 

End Sub

 
ส่วนจะ Default อยู่ที่ Cancel ไม่แน่ใจว่าจะทำได้ แต่ถ้าทำได้ คงต้องเขียนเองครับ
 


nano วันที่ส่ง: 9 ต.ค. 50 18:34 GMT+7
วันที่ปรับล่าสุด: 9 ต.ค. 50 18:34 GMT+7
REPLY #11 (63629)

ขอถามคุณ nano อีกคับ ผม ตรง  rep#5  นี่จะลบข้อมูล นี่ ผมต้องสร้าง ปุ่มมาเอง เลยหรอคับ แล้ว Delete ที่มาพร้อมกับ gridview นี่ ใช้ไม่ได้หรอคับ คือผมอยากกด Delete ที่มากับ gridview แล้วมีข้อความถาม อะคับ

 
ใช้  event  RowDeleting หรือ RowDeleted ไม่ได้หรอคับ แล้ว ถ้าใช้ได้จะใช้อย่างไรคับ
 
ขออภัยถามผมถามเยอะไปคับผม


khiang วันที่ส่ง: 10 ต.ค. 50 09:10 GMT+7
วันที่ปรับล่าสุด: 10 ต.ค. 50 09:10 GMT+7
REPLY #12 (63634)
ถ้าคุณใช้ Delete ที่มากับ Gridview (หมายถึงใช้ CommandField ที่กำหนดเป็น delete) ก็สามารถทำได้ครับ โดยคุณต้องไปเขียนโค้ดที่ Gridview_RowCreated เพื่อให้มัน Add Attribute ให้
 
โดย default แล้ว ปุ่ม command จะมี type เป็น Link Button ครับ แต่คุณสามารถเลือกเป็น Button, หรือ ImageButton ได้ครับ
สมมติว่าเราใช้ link button นะครับ

 

Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated

    Dim ctl As LinkButton

    If e.Row.RowType = DataControlRowType.DataRow Then

        ctl = e.Row.Controls(1).Controls(0)

        ctl.Attributes.Add("onClick", "return confirm('Delete?');")

    End If

End Sub

 

ถ้าเรากำหนด Button Type เป็นอย่างอื่นก็ไปแก้ที่  Dim ctl As LinkButton ให้เป็น Type เดียวกัน ทีนี้ถ้าดูที่บรรทัดนี้

        ctl = e.Row.Controls(1).Controls(0)

แสดงว่าคุณต้องรู้ครับว่า Command Field ของคุณอยู่ใน cell ที่เท่าไหร่ของ Gridview หรือเป็น Control ตัวที่เท่าไหร่ ในตัวอย่างนี้ cell แรก จะเก็บปุ่ม Select และ Cell ที่ 2 เป็นปุ่ม delete หลังจากนั้นจะเป็นจะเป็น column ของข้อมูลไปเรื่อยๆจนจบ ผมเลยใช้ e.Row.Controls(1) ครับ คือ Cell ที่ 2 จะมีค่า Index เป็น1

 

จะเห็นว่าค่อนข้างยุ่งยาก ถ้าจะเอาง่ายกว่านี้เราสามารถทำได้ โดยการเปลี่ยน Command Field ให้เป็น Template Field ครับ

โดยคลิ๊กที่วงรีสีแดง เพื่อเปลี่ยนให้เป็น Template Field ครับ (ตรงวงรีสีน้ำเงินด้านบนคือส่วนที่เรากำหนด Button Type ของ Command Field ที่บอกไปครับ ถ้าเปลี่ยนมาเป็น Template Field แล้วตรงนี้จะหายไป ไม่ต้องสนใจ)

 

เมื่อเปลี่ยนเป็น Template Field แล้วเรามาดูที่หน้า Source จะพบ

<asp:TemplateField ShowHeader="False">

    <ItemTemplate>

    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Delete"

    Text="Delete" OnClientClick="return confirm('Delete');"></asp:LinkButton>

    </ItemTemplate>

</asp:TemplateField>

 

เราก็เพิ่ม OnClientClick="return confirm('Delete');" เข้าไปก็ใช้ได้แล้วครับ จะเห็นว่าง่ายกว่าเยอะถ้าเรามาใช้ Template Field โดย เราสามารถเปลี่ยนไปใช้ web control ได้เช่นกัน แทนที่จะใช้ Link Button ไปใช้เป็น Image Button ก็ได้ครับ

 

จากโค้ด javascript นะครับ return confirm('Delete'); หมายความว่าถ้า user กด cancel มันจะไปคือค่า false ให้ หรือมีค่าเท่ากับ event.returnValue = false แปลว่ายกเลิก event ไป ดังนั้นจะไม่มีการ Postback กลับไป web server ถ้า user กด ok มันจะคืนค่า true แปลว่าทำ event นั้นต่อ ก็คือ postback ไป web server



jnithi วันที่ส่ง: 10 ต.ค. 50 10:18 GMT+7
วันที่ปรับล่าสุด: 10 ต.ค. 50 10:18 GMT+7
REPLY #13 (63636)

ขอบคุณทุกท่านเลยนะคับ คุณnano คุณ Jnithi ที่มาช่วยไขข้อข้องใจคับ ผมอยากให้ช่วยอีกนิดนะคับผม

 
 

Protected Sub btnEditFinish_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEditFinish.Click

Dim strEdit As String = "update USER_INFO set FNAME ='" + txtName.Text + "',LNAME ='" + txtSurname.Text + "',NICKNAME ='" + txtNickname.Text + "',DEP_CODE ='" + ddlDep.Text + "',SEC_CODE ='" + ddlSec.Text + "',PHONE ='" + txtPhone.Text + "',EMAIL = '" + txtEmail.Text + "' where USER_ID ='" + txtUser_Id.Text + "'"

conn.command(strEdit)

'Response.Write("<script language=javascript>")

'Response.Write("alert('ระบบได้ทำงานบันทึกข้อมูลเรียบร้อยแล้ว.......');")

'Response.Write("</script>")

Response.Redirect("~/User Manage.aspx")

End Sub

 

 

คือ โค๊ดด้านบนเนี่ยคับ มันเป็นปุ่ม ยืนยันการแก้ไขข้อมูล พอใช้ แบบนี้ แล้ว มันเปลี่ยนหน้า โดย User ไม่ทันเห็น  Dialog อ่ะคับ

ผมอยากได้แบบ โชว์ Dialog ขี้นมาค้างไว้ให้เค้ากด Ok ถึง เปลี่ยน Page ไป หรือว่า อย่างน้อยก็มีการ หน่วงเวลาให้ User ได้เห็นอ่ะคับ ไม่ทราบจะทำได้ยังไงคับ ขอบคุณล่วงหน้าคับ



khiang วันที่ส่ง: 10 ต.ค. 50 10:38 GMT+7
วันที่ปรับล่าสุด: 10 ต.ค. 50 10:38 GMT+7
REPLY #14 (63644)

ทำไมใช้ Response.Redirect แล้วมันเปลี่ยนหน้าโดย user ไม่เห็น Dialog คำถามนี้ลองไปอ่านบทความ ASP.Net Page Navigation ก่อนครับ (แอบโปรโมต) บอกให้ก็ได้ครับ พอ browser เจอคำสั่ง response.redirect มันจะทำงานคำสั่งนี้ทันที ก็เลยไม่ทันได้ alert มันไปซะแล้ว

 
วิธีแก้มีหลายวิธีครับ แต่วิธีที่ง่ายสุดและน่าจะดีสุดคือ คุณใช้ javascript สั่ง document.location แทน การสั่ง response.redirect และก็ไม่ควรสั่งเป็น response.write แต่ใช้ ClientScript ดีกว่าครับ
 

Dim sb As New StringBuilder

sb.Append("<script type='text/javascript' language='javascript'>")

sb.Append("alert('ระบบได้ทำงานบันทึกข้อมูลเรียบร้อยแล้ว.......');")

sb.Append("document.location ='Test.aspx';")

sb.Append("</script>")

Page.ClientScript.RegisterStartupScript(Page.GetType, "RedirectScript", sb.ToString)

 

แบบนี้พอ user กด OK ที่ alert แล้วถึงจะทำการ navigate ไปยังหน้าที่เรากำหนดครับ

 


jnithi วันที่ส่ง: 10 ต.ค. 50 11:56 GMT+7
วันที่ปรับล่าสุด: 10 ต.ค. 50 11:56 GMT+7
REPLY #15 (63648)
ขอบพระคุณมากคับ ถ้าไม่ได้พี่ๆทุกคน ผมก็ไม่รู้จะทำยังไงแล้วคับ ขอบคุณมากคับ


khiang วันที่ส่ง: 10 ต.ค. 50 13:01 GMT+7
วันที่ปรับล่าสุด: 10 ต.ค. 50 13:01 GMT+7
REPLY #16 (63658)
ขอบคุณ คุณjnithi ครับช่วยเสริมได้ดีมากครับ


nano วันที่ส่ง: 10 ต.ค. 50 14:56 GMT+7
วันที่ปรับล่าสุด: 10 ต.ค. 50 14:56 GMT+7
กระทู้นี้มีอายุเกิน 365 วันแล้ว ท่านจะไม่สามารถตอบกระทู้นี้ได้อีก
ถ้าต้องการสนทนาต่อ กรุณาตั้งเป็นกระทู้ใหม่ได้ในหน้าโฮม
และอาจจะอ้างถึงกระทู้นี้ โดยก๊อปปี้ข้อความในกล่องสีขาวด้านล่างไปแปะในกระทู้ใหม่

copy เพื่ออ้างอิงถึงข้อความนี้:
ขอถามเรื่อง messagebox in asp.net หน่อยคับ
http://greatfriends.biz?63505


4 ก.ย. 01:24
Online: 187