PDA

View Full Version : سوال: مشکل در صفحه بندی اطلاعات دیتا بیس با ListView



Mofid.m
چهارشنبه 17 دی 1393, 12:32 عصر
درود به همه دوستان
من یه مشکلی دارم که فکر میکنم بیشتر به تجربه در کار برمیگرده ( که من هنوز تجربه نکردم )
من یه جدول Image تو دیتا بیس دارم که فیلد هاش به این شکله
Pic_Name* Location* Alt Description
فیلد هایی که کنارشون * گذاشتم فیلد کلیدن
من زمانی که رویداد Page_Load اتفاق می افته کدی نوشتم که یه DataTable من رو به شکل رندم پر میکنه با این دستور:
SELECT * FROM Images WHERE Location=@location ORDER BY NEWID()
من میخوام اطلاعات این جدول توی صفحه، 15تا 15تا نمایش بده یعنی صفحه بندی کنم و تو هر صفحه 15تا البته باید یادآوری کنم که اطلاعات رو من به شکل رندم از جدولImage خوندم و ریختم توی DataTable
من تو صفحه خودم از یه ListView , DataPager استفاده کردم و تنظیمات معمول رو انجام دادم تا DataPager، ListView رو کنترل کنه.

<asp:ListView ID="lstImage" runat="server" DataKeyNames="Pic_Name,Location">
<LayoutTemplate>
<asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
</LayoutTemplate>
<ItemTemplate>
<div id="CSSIDFORBOX">
<a href="#">
<img src='Images/<%# Eval("Pic_Name") %>' alt='<%# Eval("Alt") %>' title='<%# Eval("Alt") %>' />
<div><%# Eval("Comment") %></div>
</a>
</div>
</ItemTemplate>
</asp:ListView>

و در قسمتPage_Load صفحه هم DataTable خودمو به ListView نسبت دادم:
lstImage.DataSource=dt;
lstImage.DataBind();

عکس های من به درستی نمایش داده میشه ولی وقتی رو شماره صفحه کلیک میکنم رفرش میشه و هیچ اتفاقی نمی افته اما اگه دوبار کلیک کنم (نه دابل کلیک) میره صفحه دوم و بازم اگه صفحه اول رو انتخاب کنم با دو بار کلیک کردن Pager نشون میده که تو صفحه اول هستم ولی همچنان اطلاعات صفحه دوم رو بهم نشون میده و دیگه تغییر نمکنه (Pager کار میکنه ولی با دوبار کلیک کردن فقط دفعه اول اما دیگه ListView کار نمیکنه فقط Pager صفحاتش تغییر میکنه)

من یه بارم با کنترل SqlDataSource امتحان کردم، گذاشتمش تو صفحه و Config کردمش و خیلی عالی کار میکنه اما وقتی میره صفحه دوم دوباره اطلاعات رو از جدول به شکل رندم میخونه و همچی بهم میریزه من میخوام وقتی کاربری وارد این صفحه شد اطلاعات جدول من به شکل رندم براش انتخاب بشه و همین اطلاعات رو براش صفحه بندی بشه.

البته اینم بگم که من تو رویداد Page_Load خودم شرط زیر رو هم بکار بردم تا زمانی که صفحه پست شد دوباره DataTable رو پر نکنه و DataTable من هم سراسری تعریف شده.
If(!this.IsPostBack)
{}

keiv@n
چهارشنبه 17 دی 1393, 12:55 عصر
حذف شده است . ..

Mofid.m
چهارشنبه 17 دی 1393, 13:08 عصر
listView این قابلیت رو داره که مثل GridView عمل کنه و آزادی عمل زیادی هم بهت میده
GridView پس از رندر کردن Markup خودشو وابسته به Table تولید میکنه در صورتی که شما با ListView آزادی عمل زیادی دارین تا کد های خودتونو به غیر از جدول به شکل های دیگه ایی هم نمایش بدین
مثل همینجا که من کدهامو توی یه تگ <div> گذاشتم و براش استایل تعریف کردم

korosh00
چهارشنبه 17 دی 1393, 13:25 عصر
اگه مشکلت صفحه بندی دیتالیست هست که اینجا رو ببین
قسمت
GroupItemCount="3"
PageSize="9"





<asp:ListView runat="server" ID="ProductsListView" GroupItemCount="3"
DataSourceID="gallery1" DataKeyNames="idgallery"

style=" position: absolute; font-size: medium" EnableModelValidation="True">

<LayoutTemplate>
<table cellpadding="2" runat="server"
id="tblProducts" >
<tr runat="server" id="groupPlaceholder">
</tr>
</table>
<div class="kadr1-2-3"> صفحات گالری -----
<asp:DataPager runat="server" ID="DataPager"
PageSize="9">
<Fields>
<asp:NumericPagerField ButtonCount="3"
PreviousPageText="<--"
NextPageText="-->" />
</Fields>

</asp:DataPager>
</div>
</LayoutTemplate>
<GroupTemplate>
<tr runat="server" id="productRow"
>
<td runat="server" id="itemPlaceholder">
</td>
</tr>
</GroupTemplate>
<ItemTemplate>

<td id="Td1" valign="top" align="center" style="width:300px" runat="server">

<div>

<img src=<%#Eval("aks")%> class="aksgerd" style="width:230px; height: 255px; padding-right:5px; margin-right:5px; ">


<div class="desc1">

<asp:Label ID="Label1" runat="server" Text=<%#Eval("titr")%>></asp:Label>
</div>
</div>
</td>


</ItemTemplate>
</asp:ListView>

keiv@n
چهارشنبه 17 دی 1393, 13:32 عصر
listView این قابلیت رو داره که مثل GridView عمل کنه و آزادی عمل زیادی هم بهت میده
GridView پس از رندر کردن Markup خودشو وابسته به Table تولید میکنه در صورتی که شما با ListView آزادی عمل زیادی دارین تا کد های خودتونو به غیر از جدول به شکل های دیگه ایی هم نمایش بدین
مثل همینجا که من کدهامو توی یه تگ <div> گذاشتم و براش استایل تعریف کردم

حق با شماست من با یه قضیه دیگه اشتباه گرفتم :لبخندساده:

برای ساختن گالری تصاویر می تونید از گروهبندی داخل listview استفاده کنید :


<asp:ListView groupItemCount="عدد"
<groupTemplate>