PDA

View Full Version : سوال: ایجاد عناصر ListView به صورت ماتریسی



ozzy_mra
سه شنبه 18 تیر 1392, 07:38 صبح
سلام
من روی یه سایت تبلیغاتی کار می کنم. در بخش معرفی کالا ، می خوام اطلاعات کالا و عکسش رو از دیتا بیس بخونم و به کمک یه لیست ویوو اونا رو نمایش بدم ولی می خوام لیست ویوم در هر سطر چهار باکس مربوط به کالا رو نشون بده و بعد بره سطر بعدی یعنی به صورت یه ماتریس با n سطر و چهار ستون.
یعنی بخش ItemTemplate مربوط به ListView اول سطر اول رو تکمیل کنه و بعد بره سراغ سط دوم.

farzane_t
سه شنبه 18 تیر 1392, 07:54 صبح
سلام.
مشکلتون اینه که نمیدونید داخلش رو چطور 4 ستونه کنید؟ خیلی راحته، این یه نمونش،


<asp:DataList ID="datalist_Data" runat="server">
<HeaderTemplate>
<table>
<tr style="background-color: #6699FF; color: #FFFFFF; font-size: large;">
<td width="150">Column 1</td>
<td width="150">Column 2</td>
<td width="150">Column 3</td>
<td width="150">Column 4</td>
</tr>
</table>
</HeaderTemplate>
<ItemTemplate>
<table>
<tr>
<td width="150"><%# Eval("c1") %></td>
<td width="150"><%# Eval("c2") %></td>
<td width="150"><%# Eval("c3") %></td>
<td width="150"><%# Eval("c4") %></td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>

ozzy_mra
سه شنبه 18 تیر 1392, 08:55 صبح
سلام.
مشکلتون اینه که نمیدونید داخلش رو چطور 4 ستونه کنید؟ خیلی راحته، این یه نمونش،


<asp:DataList ID="datalist_Data" runat="server">
<HeaderTemplate>
<table>
<tr style="background-color: #6699FF; color: #FFFFFF; font-size: large;">
<td width="150">Column 1</td>
<td width="150">Column 2</td>
<td width="150">Column 3</td>
<td width="150">Column 4</td>
</tr>
</table>
</HeaderTemplate>
<ItemTemplate>
<table>
<tr>
<td width="150"><%# Eval("c1") %></td>
<td width="150"><%# Eval("c2") %></td>
<td width="150"><%# Eval("c3") %></td>
<td width="150"><%# Eval("c4") %></td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>



ممنون ولی شما فرض کنید کوئری من چیزی شبیه به این باشه :

Select name,desc,image from table
که تعداد سطر هایی که برگردونده میشه مشخص نیست مثلاً ممکنه فقط دو تا باشه ، در این صورت ما تو ItemTemplate مون دو تا باکس داریم که دیتایی توش قرار نمیگیره
منظور من اینه که برای هر کالا می خوام یه باکس به کمک div طراحی کنم که یه هدر و یه فوتر و یه بخش برای نمایش عکس و توضیحات ، یه چیزی شبیه به این ولی به صورت داینامیک یعنی اگه دو تا بود فقط دو تا باکس نشون داده بشه و اگه n تا بود در m سطر و 4 ستون :
106917

ozzy_mra
سه شنبه 18 تیر 1392, 12:19 عصر
کسی می تونه منو کمک کنه لطفاً؟

farzane_t
سه شنبه 18 تیر 1392, 17:32 عصر
جتما میخواین با listview انجام بدید؟ با repeater تونستم انجام بدم اما با listview نشد هرکار کردم

ozzy_mra
چهارشنبه 19 تیر 1392, 08:43 صبح
جتما میخواین با listview انجام بدید؟ با repeater تونستم انجام بدم اما با listview نشد هرکار کردم

نه اصراری نیست، چون می خواستم صفحه بندیش کنم گفتم از لیست ویو استفاده کنم، اگه ممکنه با repeater رو بهم بگید. ممنون

farzane_t
چهارشنبه 19 تیر 1392, 09:22 صبح
repeater هم از نظر صفحه بندی مشکلی نداره ، از custom paging استفاده کنید. تو نت مطلب در موردش زیاده. میخواستم نمونه رو براتون آپلود کنم اما نشد. کدارو میزارم برات:
برای اینکه مجبورش کنم هر سطر 4 تا محصول فقط نشون بده خود ریپیتر رو انداختم داخل یه جدول یه سطر و یه ستونه با width 400 ، آخه div که واسه هر محصول در نظر گرفتم 100. شاید راه بهتری داشته باشه نمیدونم.


<table border="0" cellpadding="0" cellspacing="0" width="400">
<tr>
<td>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<div style="width: 100px; float: left;">
<div><asp:Image ID="Image1" runat="server" ImageUrl='<%#Eval("image","~/images/{0}") %>' Height="80" Width="72" /></div>
<div><%#Eval("name")%></div>
<div><%#Eval("desc")%></div>
<div"><asp:Button ID="btndl" runat="server" Text="دانلود" /></div>
</div>
</ItemTemplate>
</asp:Repeater>
</td>
</tr>
</table>


protected void Page_Load(object sender, EventArgs e)
{
string select = "select name,[desc],image from Table2";
SqlConnection cnn = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand(select, cnn);
SqlDataAdapter dap = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
dap.Fill(dt);

Repeater1.DataSource = dt;
Repeater1.DataBind();
}


امیدوارم همونی باشه که میخواستین. موفق باشی :)

ozzy_mra
چهارشنبه 19 تیر 1392, 09:45 صبح
خیلی ممنون ، فکر کنم خودش باشه فقط این کد تعداد سلوول هایی که ایجاد میکنه با تعدادی که از دیتابیس می خونه تطابق داره دیگه؟ یعنی اگر 6 تا بخونه ردیف اول 4 ستون و ردیف دوم 2 ستون داره دیگه؟ ممنون

Rezaguitar
چهارشنبه 19 تیر 1392, 13:55 عصر
پیشنهاد جالبی بود ولی به نظر من راه کاملی نیست و تو سایزهای متفاوت ایجاد مشکل میکنه,شما میتونی از datalist استفاده کنی
به این شکل که خاصیت repeat direction رو روی horizontal قرار بدی و خاصیت repeat columns رو 4 قرار بدی و بعد هم با custom paging صفحه بندی کنی
موفق باشی

ozzy_mra
چهارشنبه 19 تیر 1392, 14:11 عصر
پیشنهاد جالبی بود ولی به نظر من راه کاملی نیست و تو سایزهای متفاوت ایجاد مشکل میکنه,شما میتونی از datalist استفاده کنی
به این شکل که خاصیت repeat direction رو روی horizontal قرار بدی و خاصیت repeat columns رو 4 قرار بدی و بعد هم با custom paging صفحه بندی کنی
موفق باشی

این خیلی خوب بود اگر ممکنه یه نمونه کد ازش بزارید

ozzy_mra
چهارشنبه 19 تیر 1392, 15:08 عصر
این کد بدرد خورد ، از همگی دوستان متشکرم :
<asp:DataList runat="server" ID="datalist" RepeatColumns="4" RepeatDirection="Horizontal" RepeatLayout="Table">
<HeaderTemplate>
<table>
<tr style="background-color: #6699FF; color: #FFFFFF; font-size: large;">
<td width="150">Column 1</td>
<td width="150">Column 2</td>
<td width="150">Column 3</td>
<td width="150">Column 4</td>
</tr>
</table>
</HeaderTemplate>
<ItemStyle Width="150" Wrap="true" />
<ItemTemplate>

<%# (Container.DataItem as Foo).Name %><br />
<%# (Container.DataItem as Foo).Description %><br />
<%# (Container.DataItem as Foo).ImageUrl %>

</ItemTemplate>
</asp:DataList>

mbasirati
چهارشنبه 19 تیر 1392, 16:10 عصر
سلام
هیچ نیازی به استفاده از repeater و یا Datalist نیس. شما با همون listView میتونی کارتو انجام بدی. برای مثال شما داخل itemTemplate یه div میذاری بعد با Css ارتفاع و عرض مورد نظر رو میدی و float:right بهش میدی. همین!
دیگه بقیه کارا خودش انجام میشه و میشه همون چیزی که شما میخوای.
اگه نیاز به مثال هم داشتی بگو تا برات بذارم.

Rezaguitar
چهارشنبه 19 تیر 1392, 17:12 عصر
سلام
هیچ نیازی به استفاده از repeater و یا Datalist نیس. شما با همون listView میتونی کارتو انجام بدی. برای مثال شما داخل itemTemplate یه div میذاری بعد با Css ارتفاع و عرض مورد نظر رو میدی و float:right بهش میدی. همین!
دیگه بقیه کارا خودش انجام میشه و میشه همون چیزی که شما میخوای.
اگه نیاز به مثال هم داشتی بگو تا برات بذارم.
item template مگه به همره alternative item template برای تک تک عناصر به کار نمیره؟خوب استایل دادن بهش ما رو به این هدف نمیرسونه,اگر یه مثال بزنید واضحتر میشه.ممنون

mbasirati
چهارشنبه 19 تیر 1392, 19:40 عصر
نه نیازی نیس.
من برای گالری یه سایت اینو استفاده کردم:
<div class="portfolio four">
<asp:listview id="ListView1" runat="server" datasourceid="SqlDataSource1">
<ItemTemplate>
<div class="p_item">
<a href="<%# string.Concat("uploads/images/",Eval("PicName")) %>" title="<%# Eval("PicTitle"+"_"+Session["mylang"].ToString()) %>" rel="prettyPhoto[portfolio]">
<img src="<%# string.Concat("uploads/images/",Eval("PicName")) %>" alt="<%# Eval("PicTitle"+"_"+Session["mylang"].ToString()) %>" /></a>
</div>
</ItemTemplate>
</asp:listview>

<asp:sqldatasource id="SqlDataSource1" runat="server" connectionstring="<%$ ConnectionStrings:ArvinTradingConnectionString %>" providername="System.Data.SqlClient" selectcommand="SELECT * FROM [Pics] WHERE ([AlbumID] = @AlbumID) order by PicID">
<SelectParameters>
<asp:QueryStringParameter Name="AlbumID" QueryStringField="AlbumID" Type="Int32" />
</SelectParameters>
</asp:sqldatasource>

<div class="cl"></div>
<br />
</div>


و نتیجه ش عکسیه که ضمیمه کردم

میبینید که یه لیست ویو استفاده کردم. بقیه کارا و چیدمان با سی اس اس انجام شده.

mahdi_rafatjah
جمعه 21 تیر 1392, 23:00 عصر
داداش حالا نمیدونم من نفهمیدم یا شما ها کارتونو سخت میکنید ؟
اگه از یه datalist استفاده کنی و تو تنظیمات خودش اون فلشه راحت همه چیو میتونی تنظیم کنی و لذت دنیا و آخرتت رو ببری و کد هم ننویسی
اشتباه میکنم ؟

mbasirati
جمعه 21 تیر 1392, 23:25 عصر
داداش حالا نمیدونم من نفهمیدم یا شما ها کارتونو سخت میکنید ؟
اگه از یه datalist استفاده کنی و تو تنظیمات خودش اون فلشه راحت همه چیو میتونی تنظیم کنی و لذت دنیا و آخرتت رو ببری و کد هم ننویسی
اشتباه میکنم ؟

البته سلیقه ها متفاوته. ولی من از اونجاییکه دوس دارم بیشتر کارا رو خودم انجام بدم و بفهمم چیکار میکنم (به جای سپردن کارها به asp.net) و البته ترجیح میدم بیشتر کارا رو client side انجام بدم برا همین این کارو کردم.
درسته که نتیجه همونه ولی هم اینجوری درک آدم از برنامه بیشتر میشه و هم اینکه کد بسیار تمیزتر میشه. چون معمولا استفاده از ویزاردهای ویژوال استادیو، کد رو به شدت (تاکید میکنم به شدت) شلخته میکنه و من و هر برنامه نویس دیگه ای، این شلختگی رو نمیپسنده.

برای مثال خود گریدویو بسیار امکانات داره (امکان ویرایش، صحفه بندی و ...) ولی از اونجاییکه چیزی که سمت کاربر تولید میکنه یه مشت جداول تودرتو هست من اصلا اینو نمیپسندم و سعی میکنم خودم از یه repeater یا listView استفاده کنم و همه کارا رو خودم انجام بدم تا هم کدی که مینویسم تمیزتر باشه و هم بفهمم دارم چیکار میکنم و دستم هم برای بقیه کارا بازتر باشه و کدهای الکی هم سمت کاربر تولید نمیشه.

البته من یه برنامه نویس بسیار معمولی هستم و چه بسا خودم رو هنوز طراح و برنامه نویس وب نمیدونم. فقط در حد علم ناچیز خودم گفتم.
موفق باشی :)