Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > ทดสอบความทรงจำ ASP.NET Repeater ข้อมูลมันจะหายไปเมื่อ PostBack (Item.DataItem IS NULL)



 

ทดสอบความทรงจำ ASP.NET Repeater ข้อมูลมันจะหายไปเมื่อ PostBack (Item.DataItem IS NULL)

 



Topic : 111111



โพสกระทู้ ( 611 )
บทความ ( 0 )



สถานะออฟไลน์




มีแนวทางแก้ไขไหมครับ?
...
...

Thank.



Tag : .NET, Web (ASP.NET), Win (Windows App), VB.NET, C#









ประวัติการแก้ไข
2014-09-05 14:50:49
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-09-05 14:49:17 By : หน้าฮี View : 1371 Reply : 12
 

 

No. 1



โพสกระทู้ ( 611 )
บทความ ( 0 )



สถานะออฟไลน์


ผมถามไปส่งเดชอย่างนั้นแหละครับ (ผมมีคำตอบในใจอยู่แล้ว)

ปล. ผมมีอีก หมื่นแสนพันร้อย คำถาม และผมมั่นใจว่า ไม่มีใครตอบผมได้แม้แต่คนเดียว(จริงหรือเปล่า?ป








ประวัติการแก้ไข
2014-09-05 16:21:42
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-05 16:20:37 By : หน้าฮี
 


 

No. 2

Guest


สรุปว่า ในเมืองไทยนี้ ไม่มีใครตอบผมได้ใช่ไหม?
---

ปล. โดนด่าเละแน่ตรู่...
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-05 16:48:18 By : หน้าฮี
 

 

No. 3

Guest


ผมมาขอฟังอย่างเดียวละกันครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-16 11:08:16 By : patzy
 


 

No. 4

Guest


คำถามไม่ชัด ไม่มีใครตอบได้หรอก

โดยปกติถ้า postback ธรรมดา repeater item ไม่มีทางหายหรอก

ยกเว้น item เหล่านั้นจะถูกสร้างขึ้นแบบ dynamic พอมีการ postback อีกครั้ง

method ที่ใช้สร้าง item เลยไม่ได้ถูกเรียกใช้ มันเลยไม่ได้ถูกสร้างขึ้นมาใหม่

วิธีแก้ก็คือ

- ajax

- viewstate

ปล.ปัญหานี้มักจะเจอกับพวกอ่อนหัดที่ไม่รู้จัก page life cycle เท่านั้น

ไม่รู้ก็บอกไม่รู้ ไม่ต้องมาฟอร์มเดี๋ยวจะสอนให้เอง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-16 14:15:00 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 5



โพสกระทู้ ( 611 )
บทความ ( 0 )



สถานะออฟไลน์


What happend!!!

Code (JavaScript)
<html lang="lao-girl">
<head id="Head1" runat="server">
    <title>คันหูไม่รู้เป็นอะไร เอาอะไรมาแหย่ก็ไม่หาย</title>
</head>
<body>
    <form id="form1" runat="server">
    <script type="text/javascript">
        function callbackGetData(arg) {
           setTimeout("<asp:literal runat="server" id="ltrCallback" />", 1500);
        }
    </script>
    </form>
</body>
</html>



ปล. การเขียน JavaScript แทรกใน Tag Head และใน Tag Body ผลลัพธ์ที่ได้มันไม่เหมือนกัน งงเหมือนกันครับ


ประวัติการแก้ไข
2014-09-17 06:06:13
2014-09-17 06:09:49
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-17 06:05:19 By : หน้าฮี
 


 

No. 6



โพสกระทู้ ( 611 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 4 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2014-09-16 14:15:00
รายละเอียดของการตอบ ::


ผมอยากเดินทางอื่นบ้างนอกเหนือจาก
1. Jquery Ajax
2. MS Ajax (AJAX Extentions)
3. JavaScript เพียวฯ

มันเลยกลายมาเป็นแบบนี้ครับ

Code (VB.NET)
Public Class CallBack2Client2Server
    Inherits System.Web.UI.Page
    Implements ICallbackEventHandler

    Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
        Return _CallbackValue 
    End Function

    Public Sub RaiseCallbackEvent(eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
        Using sw As New System.IO.StringWriter()
            GridView.RenderControl(New HtmlTextWriter(sw))
            _CallbackValue = sw.ToString()
        End Using
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsCallback Then
            ltrCallback.Text = ClientScript.GetCallbackEventReference()
        End If
    End Sub
End Class



ปล. เท่าที่ลองดูในเบื้องต้น มันทำงานได้เร็วกว่าการใช้ UpdatePanel (AJAX Extensions) อยู่พอสมควร
และความเร็วที่ได้ไม่แตกต่างกับ Jquery Ajax


***** เน้นว่า เท่าที่ลองดูในเบื้องต้น


ประวัติการแก้ไข
2014-09-17 06:22:05
2014-09-17 06:22:54
2014-09-17 06:39:32
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-17 06:18:19 By : หน้าฮี
 


 

No. 7

Guest


Quote:
ปล. การเขียน JavaScript แทรกใน Tag Head และใน Tag Body ผลลัพธ์ที่ได้มันไม่เหมือนกัน งงเหมือนกันครับ


- คิดว่า error น่ะถ้าเขียน server control ไว้นอก tag form น่ะ

อีกอย่าง javascript มันรัน server control ได้ด้วยเหรอ ???


Quote:
ปล. เท่าที่ลองดูในเบื้องต้น มันทำงานได้เร็วกว่าการใช้ UpdatePanel (AJAX Extensions) อยู่พอสมควร
และความเร็วที่ได้ไม่แตกต่างกับ Jquery Ajax


- updatepanel มัน ajax หลอกอยู่แล้ว ดูมันทำงานสิ ยังทำงานตาม page life cycle อยู่ดี เพียงแค่เป็นแบบ async แค่นั้นเอง

เราว่าถ้านายจะเล่น ajax เปลี่ยนมา mvc ดีกว่า เพราะถ้าเขียนแบบ web form อยู่มันก็ต้องเรียกใช้งานอะไรต่อมิอะไร

ผ่าน class ที่มันให้มาตลอด ต้องศึกษาว่าตัวไหนใช้ทำอะไร เขียนแบบอิสระได้ค่อนข้างจำกัด

เพราะจะติดเรื่อง page life cycle กับ event ของมัน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-17 08:55:41 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 8



โพสกระทู้ ( 611 )
บทความ ( 0 )



สถานะออฟไลน์


Code
เปลี่ยนมา mvc ดีกว่า อันนี้น่าสนใจครับ เมื่อถึงปี ค.ศ. 2022 ค่อยว่ากันอีกทีหนึ่งครับ (ถ้าผมไม่ตายห่าไปเสียก่อน)


อีกอย่าง javascript มันรัน server control ได้ด้วยเหรอ ???

ลองดูครับ (ผมงงงงกับมันอยู่เหมือนกัน)
Code (VB.NET)
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="CallBack2.aspx.vb" Inherits="หอย.CallBack2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>คันหูไม่รู้เป็นอะไร เอานิ้วแหย่มันก็ไม่หาย</title>
</head>
<body>
    <form id="form1" runat="server">
    <div id="grid">
        <span>Loading...</span>
        <asp:GridView runat="Server" ID="gvคันหู" Width="400px" />
    </div>
    <script type="text/javascript">
        function EndGetData(arg) {
            document.getElementById("grid").innerHTML = arg;
        }
        //http://stackoverflow.com/questions/2004168/javascript-escape-quotes
        setTimeout("<asp:literal runat="server" id="ltCallback" />", 5000);
       //มันแอบไปสร้าง Control ใน Callback2.designer.vb เฉยเลยครับ
    </script>
    </form>
</body>
</html>



Code (VB.NET)
Public Class CallBack2
    Inherits System.Web.UI.Page
    Implements ICallbackEventHandler

    Private _Callback As String

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

        If Not Page.IsCallback Then
            ltCallback.Text = ClientScript.GetCallbackEventReference(Me, "'bindgrid'", "EndGetData", "'gvคันหู'", False)
        End If
    End Sub

    Private Function RetrieveDataTableFromDatabase() As DataTable
        Dim t As New DataTable()
        t.Columns.Add("Product", GetType(String))
        t.Columns.Add("Price", GetType(Single))

        t.Rows.Add("ปลากระป๋องตราสามหอย", 1500)
        t.Rows.Add("อดสองมื้ออิ่มหนึ่งมื้อ", 100)
        t.Rows.Add("ไม่ใช่แฟนเราก็ทำแทนได้", 3)

        Return t
    End Function

    Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
        Return _Callback
    End Function

ปล. ตัวอย่างดัดแปลงมาจาก ที่นี่ครับ 
***** http://madskristensen.net/post/asynchronous-gridview-in-5-simple-steps

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-17 10:29:26 By : หน้าฮี
 


 

No. 9



โพสกระทู้ ( 611 )
บทความ ( 0 )



สถานะออฟไลน์


จาก #NO 8 ผมเอามาใช้งานอีกแบบหนึ่งครับ
อันนี้คือตัวอย่าง (งานจริงฯ ผมไม่ได้เรียกใช้ Web Service แต่ก็มีปะปนอยู่บ้างเหมือนกัน)
อันนี้เพียงแต่ยกตัวอย่างประกอบ

Code (JavaScript)
function IC_getDoc_NO(gv) {
    //console.log('ปลากระป๋องตรา สามหอย.');
    //        var params = {
    //            id: $('#ID').val(),
    //            name: $('#Name').val(),
    //            add1: $('#Add1').val()
    //        }
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "LookupIC.asmx/GetCarsByDoors",
        data: "{doors: " + 7 + "}",
        dataType: "json",
        success: function (response) {
            var cars = response.d;
            //var gridviewASPdotNET = $('#' + gv + ' tr:has(td)'); //แบบนี้มันก็หา td ไม่เจอ งงเหมือนกันครับ
            $('form').find('#' + gv + ' tr:has(td)').each(function () {
                var cell = $(this).find("td:eq(0)").text().toLowerCase();
                if (cell.indexOf('a') != 0) {
                    $(this).css('display', 'none');
                } else {
                    $(this).css('display', '');
                }
            });
        },
    });
}



ปล. งานจริงผมส่งค่าออกไปประมาณนี้ครับ JsonConvert.SerializeObject(objData)
Code (VB.NET)
<input id="btnFilterXXX" type="button" value="กรองข้อมูล (ขึ้นต้นด้วย A)" onclick="return IC_getDoc_NO('<%= gvrptFormat.ClientID %>');" />



ประวัติการแก้ไข
2014-09-17 10:44:33
2014-09-17 10:45:17
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-17 10:40:10 By : หน้าฮี
 


 

No. 10



โพสกระทู้ ( 611 )
บทความ ( 0 )



สถานะออฟไลน์


หนามยอกเอาหนามบ่ง " Item.DataItem IS NULL (อยากหายก็หายไปเลย)"

ใช้ประโยชน์จากอีเวนต์ ItemCommand (มันทำครั้งเดียวเท่านั้นตอนที่ Binding)

Code (VB.NET)
    'มันเข้าครั้งเดียวตอน Binding
    Protected Sub หอย_ItemCommand(source As Object, e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles หอย.ItemCommand
        Select Case e.CommandName
            Case "Add"
                For Each item As RepeaterItem In หอย.Items
                    Dim cb As CheckBox = item.FindControl("cbหอย")
                    If cb.Checked Then
                        'tmpKey, tmpValue
                        cb.Attributes.Add("tmpKey", True)
                        'เอาค่านี้แหละไปเทใส่อีกครั้งหนึ่งใน อีเวนต์ หอย_ItemCreated
                    End If
                Next
    End Sub

    'มันเข้ามาทุกครั้งที่ PostBack
    Private Sub หอย_ItemCreated(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles หอย.ItemCreated
        If ((e.Item.ItemType = ListItemType.Item) OrElse (e.Item.ItemType = ListItemType.AlternatingItem)) Then
            Dim cb As CheckBox = item.FindControl("cbหอย")
            cb.Checked = cb.Attributes("tmpKey") 'น่าจะมองภาพออกนะครับ ในกรณีที่ยังไม่ได้คำตอบที่พึงพอใจ +55555
        End If
    End Sub



จบบริบูรณ์


ประวัติการแก้ไข
2014-09-17 16:49:34
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-17 16:47:32 By : หน้าฮี
 


 

No. 11



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-17 17:10:54 By : mr.win
 


 

No. 12



โพสกระทู้ ( 611 )
บทความ ( 0 )



สถานะออฟไลน์


ขยายความ Repeater Control (ASP.NET)
Event ItemCreated

มันเข้ามาทุกครั้งที่ PostBack มันเป็นอย่างนี้
สมมุติว่ามีจำนวนรายการ (แถว) 10 แถว และวาง Table ลงไปใน Repeater Control
thead
--- tbody
----- tr
------- td
tfooter


โหลดมาแต่ละครั้ง มันจะเข้ามาอีเวนต์นี้เท่ากับ 10 x 3 = 30 ครั้ง (โอ้พระเจ้า)


Code (VB.NET)
    'มันเข้ามาทุกครั้งที่ PostBack
    Private Sub หอย_ItemCreated(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles หอย.ItemCreated

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-09-17 20:49:51 By : หน้าฮี
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ทดสอบความทรงจำ ASP.NET Repeater ข้อมูลมันจะหายไปเมื่อ PostBack (Item.DataItem IS NULL)
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่