PDA

View Full Version : سوال: صفحه بندی در ListView



pedram_ns
دوشنبه 09 فروردین 1389, 15:10 عصر
سلام
من از ليست ويو استفاده كردم كه ديتاپيجر هم داره و با كد نويسي اطلاعات ديتا بيس رو مي خونم و در اون نمايش مي دم همه چي كار مي كنه ولي فقط دكمه هايي كه در بين صفحات اجازه حركت مي ده كار نمي كنه و ارور زير رو مي ده.


Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

mehdi.mousavi
دوشنبه 09 فروردین 1389, 17:38 عصر
سلام
من از ليست ويو استفاده كردم كه ديتاپيجر هم داره و با كد نويسي اطلاعات ديتا بيس رو مي خونم و در اون نمايش مي دم همه چي كار مي كنه ولي فقط دكمه هايي كه در بين صفحات اجازه حركت مي ده كار نمي كنه و ارور زير رو مي ده.


Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.


سلام.
من در این پست (http://barnamenevis.org/forum/showpost.php?p=927902&postcount=2)، بطور مفصل در این مورد توضیح داده ام.

موفق باشید.

pedram_ns
سه شنبه 10 فروردین 1389, 20:39 عصر
سلام
حالت EnableEventValidation رو در صفحه false كردم ديگه ارور نمي ده ولي حالت paging هم كار نمي كنه و نمي شه بين صفحات حركت كرد.
من در صفحه ام از ديتاليست استفاده كردم و ارتباط با ديتابيسم رو با كد نويسي انجام دادم كد صفحه ام اينه:

Imports System.Data
Imports System.Data.OleDb
Partial Class _search
Inherits System.Web.UI.Page

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

Panel1.Visible = False

Dim job As String
job = Request.Form("jobstxt")
If job = "" Then
job = "Nothing"
End If
Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|database.mdb")
Dim selectsql As String = "SELECT * FROM [company] WHERE ([search] LIKE '%' + ? + '%')"

Dim cmd As New OleDbCommand(selectsql, con)
cmd.Parameters.AddWithValue("search", job)

con.Open()
Dim adapter As New OleDbDataAdapter(cmd)
Dim ds As New DataSet()

adapter.Fill(ds, "company")

Dim count As String
count = ds.Tables("company").Rows.Count
If count <> 0 Then
Panel1.Visible = True
Label20.Text = job
Label18.Text = "تعداد '' " & count & " '' مورد بر اساس عبارت فوق يافت شد."
End If
ListView1.DataSource = ds
ListView1.DataBind()
con.Close()

End Sub

End Class

ايا كد ديگري هم مي خواد مثلا براي صفحه بندي؟

mmnoody2006
چهارشنبه 11 فروردین 1389, 19:41 عصر
یه مقاله خوب در مورد list view

pedram_ns
پنج شنبه 12 فروردین 1389, 11:49 صبح
دوست گرامي اين مقاله ايي كه معرفي كرديد خيلي خوب بود و ممنون.
من اگه از كنترل هاي vs براي ارتباط با ديتابيس استفاده كنم و از listview استفاده كنم مشكلي پيش نمياد مشكل اينه كه من با كد نويسي به ديتابيس اكسس وصل مي شم و اطلاعات رو به listview ميدم در اين حالته كه صفحه بندي كار نمي كنه.
در اين حالت دكمه هاي pager اصلا كار نمي كنه ولي لينك اعداد datapager با يك بار تاخير كار مي كنه يعني اگه عددي رو كليك كنم صفحه ايي كه دفعه قبلي كليك كردم باز مي شه.

pedram_ns
یک شنبه 15 فروردین 1389, 17:25 عصر
خوب فكر كنم بايد يكسري كد هم براي صفحه بندي ليست ويو بنويسم ولي نمي دونم چي؟
دوستان لطفا بگين براي صفحه بندي ليست ويو بايد چه كدي و در چه رويدادي بنويسم

mehdi.mousavi
دوشنبه 16 فروردین 1389, 14:26 عصر
كسي نمي تون كد صفحه بندي ليست ويو رو بهم بده؟

سلام.
لطفا به http://www.4guysfromrolla.com/articles/021308-1.aspx رجوع کنید.

موفق باشید.

pedram_ns
دوشنبه 16 فروردین 1389, 23:29 عصر
اگر منظورتون اين كده درست سر در نياوردم ممكنه خودتون يك توضيحي بدين.

Protected Sub ProductList_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles ProductList.DataBound
Dim currentPage As Integer = (DataPagerID.StartRowIndex / DataPagerID.PageSize) + 1
Dim totalPages As Integer = DataPagerID.TotalRowCount / DataPagerID.PageSize

'Populate the DropDownList if needed
Dim ddl As DropDownList = CType(DataPagerID.Controls(0).FindControl("PageJump"), DropDownList)
If ddl.Items.Count = 0 Then
'Add a list item for each page
For i As Integer = 1 To totalPages
ddl.Items.Add(i.ToString())
Next

'Set the DDL to the appropriate page value
ddl.Items.FindByValue(currentPage.ToString()).Sele cted = True
End If
End Sub

pedram_ns
چهارشنبه 25 فروردین 1389, 15:36 عصر
دوستان من بعد از پرس و جوي زياد هنوز نتونستم ليست ويو رو صفحه بندي كنم.
حتما كسي از دوستان اينكار رو كرده لطفا اگر كسي مي دونه كمك كنه يا يك نمونه برام بذاره.

fa_karoon
پنج شنبه 26 فروردین 1389, 22:02 عصر
دوستان من بعد از پرس و جوي زياد هنوز نتونستم ليست ويو رو صفحه بندي كنم.
حتما كسي از دوستان اينكار رو كرده لطفا اگر كسي مي دونه كمك كنه يا يك نمونه برام بذاره.

سلام دوست عزیز من هم دقیقا همچین مشکلی دارم اینو گفتم که بدونی تنها نیستی فقط دارم با چند نفر میل رد و بدل می کنم امیدوارم به زودی جوابم بدن امیدوار باش:افسرده:

fa_karoon
یک شنبه 29 فروردین 1389, 01:33 صبح
سلام دوست عزیز بلاخره به کمک یک انسان خیر این مشکل حل شد یه نمونه کد ساده رو اینجا می ذارم و کدهای پیشرفته تر رو تو تاپیکی که خودم درباره تغییر فیلدهای خونده شده از پایگاه پرسیده بودم می ذارم
به قسمت DataPager_PreRender توجه کن مشکل ما همین بوده
با تاکید بسیار این رو هم ذکر کنم که این کدها، کدهایی ست که مدیر سایت http://www.30sharp.com با ایمیل info[at]30sharp[dot]com برام ارسال کرده و من کمی اونها رو تغییر داده ام
قسمت اول کدها در حالت Design هست


<asp:ListView ID="ListView1" runat="server">
<LayoutTemplate>
<table>
<asp:PlaceHolder ID="itemPlaceHolder" runat="server"></asp:PlaceHolder>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="lblID" Text='<%# Eval("ID") %>' runat="server"></asp:Label>
&nbsp; &nbsp;
<asp:Label ID="lblTitle" Text='<%# Eval("Title") %>' runat="server"></asp:Label>

</td>
</tr>
</ItemTemplate>
</asp:ListView>
<asp:DataPager ID="DataPager1" runat="server" PagedControlID="ListView1"
PageSize="3">
<Fields>
<asp:NextPreviousPagerField FirstPageText="&lt;&lt;" ShowFirstPageButton="True" ShowNextPageButton="true"
ShowPreviousPageButton="true" />

<asp:NextPreviousPagerField LastPageText="&gt;&gt;" ShowLastPageButton="True" ShowNextPageButton="False"
ShowPreviousPageButton="False" />
</Fields>
</asp:DataPager>


و قسمت دوم هم در حالت Code_Behind


Public Function GetDatasource() As DataSet
Dim Conn As New SqlConnection
Dim Comm As New SqlCommand
Dim ds As New DataSet
Dim adp As New SqlDataAdapter

Conn.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database.mdf;Integrated Security=True;User Instance=True"
Comm.CommandText = "Select * from Articles"
Comm.Connection = Conn
adp.SelectCommand = Comm
adp.Fill(ds, "Articles")
Conn.Close()


Return ds
End Function
Public Sub BindListView()
'bind to list view
ListView1.DataSource = GetDatasource()
ListView1.DataBind()
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
BindListView()
End If


End Sub

Protected Sub DataPager1_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataPager1.PreRender
BindListView()
End Sub


موفق باشید

pedram_ns
یک شنبه 29 فروردین 1389, 15:20 عصر
دوست گرامي بسيار سپاس گذارم كه كمك كرديد دو تا مسئله هست.

اول اينكه من نتونستم PublicFunction درست كنم مي شه كد كل صفحه بيهايند رو بذارين چون اين تابع رو قبلا كار نكردم و نمي دونم كجاي صفحه بايد بذارم و كار نمي كنه.

به اين دليل مجبور شدم كل كد هاي ارتباط با ديتابيس رو در Page_Load و DataPager1_PreRender تكرار كنم كه به اين صورت مشكلم حل شد فقط فكر كنم اگر به روش شما عمل كنم بهتره مي شه يك توضيحي بدين؟

مسئله دوم من متوجه شدم كه اگه فقط تابع DataPager1_PreRender رو داشته باشم كار مي كنه و نيازي به كد Page_Load نيست ايا شما هم اين رو فهميديد و ايا اين كار اصوليه؟

pedram_ns
دوشنبه 30 فروردین 1389, 15:09 عصر
خوب مشكل حل شد فقط .....

اين روش كار مي كنه ولي من باهاش يك مشكلي دارم و اون اينه كه من از اين ليست ويو براي نمايش نتايج جستجو استفاده مي كنم كاربر از يك صفحه ديگه مثلا نام رو جستجو مي كنه و من با كد request.form اون مقدار رو مي گيرم و اطلاعات رو نمايش مي دم در اين حالت پيجينگ كار نمي كنه.
براي حل اين مشكل بايد چكار كرد؟
ممنون مي شم كمك كنيد.

fa_karoon
جمعه 03 اردیبهشت 1389, 19:59 عصر
خوب مشكل حل شد فقط .....

اين روش كار مي كنه ولي من باهاش يك مشكلي دارم و اون اينه كه من از اين ليست ويو براي نمايش نتايج جستجو استفاده مي كنم كاربر از يك صفحه ديگه مثلا نام رو جستجو مي كنه و من با كد request.form اون مقدار رو مي گيرم و اطلاعات رو نمايش مي دم در اين حالت پيجينگ كار نمي كنه.

دوست عزیز عذر می خوام جواب ندادم من هم لیست ویو رو برای همین کار دارم استفاده می کنم با این تفاوت که در MasterPage یک تکس باکس قرار دادم که کاربر در هر صفحه ای که باشه می تونه جستجو کنه و رشته ی جستجو شده رو هم با QueryString به صفحه ای که باید جستجو رو انجام بده و نتایج رو نشون بده می فرستم
نمی دونم شما به چه شیوه ای عمل می کنید اما به محض بهینه شدن کدم فایلش رو ضمیمیه میکنم
موفق باشید

fa_karoon
شنبه 11 اردیبهشت 1389, 13:00 عصر
کد زیر یه جستجو و استفاده از لیست ویو هستش


Imports System.IO
Imports System.Data
Partial Class ebookBank
Inherits System.Web.UI.Page

Public Function GetDatasource() As DataSet
'------Create String Where---------------
Dim arySearch() As String = Request.QueryString("m").Split(" ")
Dim strWhere As String = "KeyWords LIKE '%" & Request.QueryString("m") & "%'"
Dim n As Integer, i As Integer, j As Integer, p As Integer, t As Integer, k, h As Integer
n = arySearch.Length
Dim ary() As String = Request.QueryString("m").Split(" ")
h = (n * n) - n
Dim mul(n - 2, h) As String
k = 0
For i = 0 To n - 1
For j = 0 To n - 1
If arySearch(i) <> ary(j) Then
mul(0, k) = arySearch(i) + ary(j)
k = k + 1
End If
Next
Next

t = 0
For p = 2 To n
k = 0
For i = 0 To n - 1
For j = 0 To h - 1
If mul(t, j).IndexOf(arySearch(i)) = -1 Then
mul(t + 1, k) = arySearch(i) + mul(t, j)
k = k + 1
End If
Next
Next
t = t + 1
'd = (n * n) - n
Next
For i = 0 To n - 2
For j = 0 To h - 1
strWhere += " OR KeyWords LIKE '%" & mul(i, j) & "%'"
Next
Next
For i = 0 To n - 1
strWhere += " OR KeyWords LIKE '%" & arySearch(i) & "%'"
Next
'------ End Create String Where---------------

Dim ds As New DataSet()
Dim tb As New DataTable("tb")
Dim col As New DataColumn("Title", GetType(String))
tb.Columns.Add(col)
col = New DataColumn("Path", GetType(String))
tb.Columns.Add(col)
Dim row As DataRow = Nothing
Dim strcommand As String = " "
If Request.QueryString("n") = "4" Then
strcommand = "SELECT * FROM Content_Table WHERE " & strWhere & " AND Content_Deleted = False"
Else
strcommand = "SELECT * FROM Content_Table WHERE " & strWhere & " AND ContentType_ID='" & _
Request.QueryString("n") & "' AND Content_Deleted = False"
End If
Dim com As New SqlCommand(strcommand, Application("con"))
Dim myreader As SqlDataReader
Application("con").open()
myreader = com.ExecuteReader

Do While myreader.Read
If myreader(8).ToString.Trim = "Private" Then
If (Session("Role").ToString = "Admin") Or (Session("Role").ToString = "User1") Then
row = tb.NewRow()
row("Title") = "<tr style=background-color:#CCFFCC;><td><a href=" & myreader(6).ToString & ">" & myreader(1).ToString & "</a></td></tr>"
row("Path") = "<tr style=background-color:#CCFFCC;><td><a href=ebookBank.aspx?n=" & myreader(0).ToString & ">چکیده</a></td><td>" & myreader(4).ToString & "</td></tr>"
tb.Rows.Add(row)
Else
row = tb.NewRow()
row("Title") = "<tr style=background-color:#CF00CC;><td>" & myreader(1).ToString & "</td></tr>"
row("Path") = "<tr style=background-color:#CF00CC;><td><a href=ebookBank.aspx?n=" & myreader(0).ToString & ">چکیده</a></td><td>" & myreader(4).ToString & "</td></tr>"
tb.Rows.Add(row)
End If
Else
row = tb.NewRow()
row("Title") = "<tr style=background-color:#CCFFCC;><td><a href=" & myreader(6).ToString & ">" & myreader(1).ToString & "</a></td></tr>"
row("Path") = "<tr style=background-color:#CCFFCC;><td><a href=ebookBank.aspx?n=" & myreader(0).ToString & ">چکیده</a></td><td>" & myreader(4).ToString & "</td></tr>"
tb.Rows.Add(row)
End If
Loop

Application("con").close()
ds.Tables.Add(tb)
Return ds
End Function
Public Sub BindListView()
'bind to list view
ListView1.DataSource = GetDatasource()
ListView1.DataBind()
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If Request.QueryString("n") <> Nothing And Request.QueryString("m") <> Nothing Then

If Not IsPostBack Then
BindListView()
End If

End If



End Sub

End Class