PDA

View Full Version : سوال: چطوری می تونم اطلاعات رو به چند صفحه (مثلا هر صفحه 5 مطلب) تقسیم بندی کنم؟



mahdi87_gh
شنبه 17 بهمن 1388, 10:42 صبح
سلام

چطوری می تونم اطلاعات رو به چند صفحه (مثلا هر صفحه 5 مطلب) تقسیم بندی کنم؟

منظورم این حالت صفحه بندی کردن اطلاعاته (توی عکس)

maxpayn2
شنبه 17 بهمن 1388, 10:45 صبح
با استفاده از مثلا گرید ویو

mahdi87_gh
شنبه 17 بهمن 1388, 11:22 صبح
آیا داخل گرید ویو امکانی وجود داره که خودش سطرها رو در گروه های 5 تایی دسته بندی کنه؟
آیا مثل datalist میشه بهش item template داد؟
میشه توضیحات بیشتری بدید؟

SAMARE
شنبه 17 بهمن 1388, 11:35 صبح
بله این امکان وجود داره
کافیه خاصیت
AllowPaging="True"
قرار دهید و در خاصیت PageSize تعداد سطرهای موجود در هر صفحه را مشخصی کنید!

اينم يه نمونه كد گريدويو :


<asp:GridView ID="GShowSegment" runat="server"
AutoGenerateColumns="False" DataKeyNames="IDSegment" ShowFooter="True"
CellPadding="4" Width="100%" AllowPaging="True"
GridLines="None" PageSize="4"
ForeColor="#333333" onrowcommand="GShowSegment_RowCommand" >
<FooterStyle BackColor="#5D7B9D" ForeColor="White" Font-Bold="True" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<Columns>

<asp:TemplateField HeaderText="ëںê ¦¬" >
<ItemTemplate>
<%#Eval("Name")%>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="يï©ںï¬">
<ItemTemplate>
<asp:Button ID="btnEditList" runat="server" Font-Names="Tahoma" Font-Size="8pt"
Text="يï©ںï¬ ¦¬" CommandName="EditSeg" />
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="ê¬ںى§ى">
<ItemTemplate>
<asp:Button ID="btnShowList" runat="server" Font-Names="Tahoma" Font-Size="8pt"
Text="ê¬ںى§ى ںمàں" CommandName="ShowCustomer" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="¥¨ه" ItemStyle-HorizontalAlign="Center" FooterStyle-HorizontalAlign="Center"
HeaderStyle-HorizontalAlign="Center">
<FooterTemplate>
<asp:Button CommandName="Delete" Text="¥¨ه" ID="btnRemove" runat="server"
Font-Names="Tahoma" Font-Size="11px" />
</FooterTemplate>
<ItemTemplate>
<asp:CheckBox ID="ChkRemove" runat="server"></asp:CheckBox>
</ItemTemplate>
<ControlStyle BackColor="#E1EBFF" BorderStyle="None" />
<FooterStyle HorizontalAlign="Center" ></FooterStyle>
<HeaderStyle HorizontalAlign="Center" ></HeaderStyle>
<ItemStyle HorizontalAlign="Center" ></ItemStyle>
</asp:TemplateField>

</Columns>
<EditRowStyle BackColor="#999999" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
</asp:GridView>

mohsen_f_b
شنبه 17 بهمن 1388, 18:18 عصر
سلام
حالا چطوری باید اون شکل عدیدی که دلبخواه خودمون هست رو بزاریم؟
مثل همین سایت؟

باتشکر

mahdi87_gh
شنبه 17 بهمن 1388, 20:25 عصر
من این کارو کردم و جواب گرفتم
خاصیت auto generate columns=false کن و برو توی columns و یکی از نوع item template اضافه کن و اونوقت فلش بغل گرید رو بزن و edit item template رو بزن و شکل دلخواهتو ایجاد کن

mahdi87_gh
شنبه 17 بهمن 1388, 20:26 عصر
حالا من می خوام بدونم چطوری باید paging رو تنظیم کنم؟یعنی توی GridView1_PageIndexChanged چی باید بنویسم؟؟؟؟

jingiliboyz
یک شنبه 18 بهمن 1388, 08:33 صبح
با سلام منم یه سوال داشتم اینکه من می خوام داخل gridview عکس اضافه کنم در datalist وقتی edit template رو میزدیم lable هارو مشاهده میکردیم هر کدوم رو میخواستیم حذف می کردیم و به جاش مثلااز toolbax کامپوننت image اضافه می کردیم بعد فلش کنار عکس رومیزدیم و به دیتا بیس bind می کردیم ولی در گرید من وقتی edit tamplate رو میزنم دیگه هیچی دیده نمیشه که بخواهیم حذف کنیم به جاش چیز دیگه ای اضافه کنیم وقتی هم که عکس رو بهش اضافه می کنم و bind می کنم endtamplate رو که میزنم دوباره grid به صورت اولیه برمی گرده دیدم بعضی بچه ها عکس رو به grid اضافه کردن و کار هم میکنه ولی نمیدونم چطوری میشه کسی میدونه چکار باید بکنم ؟

SAMARE
یک شنبه 18 بهمن 1388, 08:43 صبح
حالا من می خوام بدونم چطوری باید paging رو تنظیم کنم؟یعنی توی GridView1_PageIndexChanged چی باید بنویسم؟؟؟؟
كافيه يه زيرروالي بصورت زير بنويسي :


Sub Do_Paging(ByVal s As Object, ByVal e As GridViewPageEventArgs) Handles GridView1.PageIndexChanging
GridView1.PageIndex = e.NewPageIndex
ShowGridView1()
End Sub


دقت كنيد كه ShowGridView1() تابعي است كه گريد شما رو پر ميكنه كه بايد در هر Page گريد فراخواني بشه!!!

maxpayn2
یک شنبه 18 بهمن 1388, 09:09 صبح
با سلام منم یه سوال داشتم اینکه من می خوام داخل gridview عکس اضافه کنم در datalist وقتی edit template رو میزدیم lable هارو مشاهده میکردیم هر کدوم رو میخواستیم حذف می کردیم و به جاش مثلااز toolbax کامپوننت image اضافه می کردیم بعد فلش کنار عکس رومیزدیم و به دیتا بیس bind می کردیم ولی در گرید من وقتی edit tamplate رو میزنم دیگه هیچی دیده نمیشه که بخواهیم حذف کنیم به جاش چیز دیگه ای اضافه کنیم وقتی هم که عکس رو بهش اضافه می کنم و bind می کنم endtamplate رو که میزنم دوباره grid به صورت اولیه برمی گرده دیدم بعضی بچه ها عکس رو به grid اضافه کردن و کار هم میکنه ولی نمیدونم چطوری میشه کسی میدونه چکار باید بکنم ؟

قرار نیست همه چی ویزاردی باشه ، میتونی توی گرید ویو خودت کد های HTML بنویسی

jingiliboyz
یک شنبه 18 بهمن 1388, 09:21 صبح
1- وقتی کد html وارد کردم چطوری bind کنم نمونه ای دارید ببینم
2- چطوری میشه یک گرید ویو در صفحه داشته باشم که در هر سطر 4 تا محصول رو نشون بده
مثل این سایت
http://www.gooshishop.com/ItemsList.aspx?BrandId=23

mahdi87_gh
یک شنبه 18 بهمن 1388, 15:45 عصر
من همه رکوردها رو بازیابی می کنم و به datasource اختصاص میدم.
آیا باید تابع showdatagrid() خودش بر اساس الگوریتمی فقط چند رکورد رو بازیابی بکنه؟

SAMARE
دوشنبه 19 بهمن 1388, 12:58 عصر
الگوریتم خاصی نداره یه زیرروال مینویسی و در اون گریدویو رو به دیتابیس وصل میکنی سپس گریدویو رو بایند میکنی
همین!!!
اگر منظورتون فيلدهايي است كه در گريدويو بايد نمايش داده بشه بايد بگم كه شما اين فيلدها رو در قسمت Itemtemplate‌هاي ساختار گريدويو مشخص ميكنيد!!!

mahdi87_gh
دوشنبه 19 بهمن 1388, 19:52 عصر
من دستور select که می نویسم، همه رکوردهای جدول رو می گیره و اونوقت به گرید بایند میکنم.سوال من این بود که آیا در اون زیر روال که فرمودین باید دستور select طوری نوشته بشه که فقط چندتا رکورد از بانک گرفته بشه؟؟ یا نه بازم همه رکوردها گرفته بشه و من توی زیرروال بیام رکوردهایی رو که میخوام مثلا داخل یه datatable دیگه کپی کنم و اونوقت datatable جدید رو که فقط چند تا رکورد داره رو به گرید بایند کنم؟
منظور:آیا در هر بار که یکی از page های گرید(شماره هایی که زیر صفحه نشون داده میشه) کلیک میشه باید همه رکوردها از database واکشی بشه یا فقط رکوردهای مربوط به اون شماره صفحه!

اگه یه مثال هم بزارید خوبه.مرسی

fa_karoon
سه شنبه 20 بهمن 1388, 01:45 صبح
سلام آیا نمی شه این صفحه بندی رو بدون گرید ویو انجام داد؟ مثلا صفحه بندی همین سایت چه جوری انجام شده؟

SAMARE
سه شنبه 20 بهمن 1388, 09:17 صبح
من دستور select که می نویسم، همه رکوردهای جدول رو می گیره و اونوقت به گرید بایند میکنم.سوال من این بود که آیا در اون زیر روال که فرمودین باید دستور select طوری نوشته بشه که فقط چندتا رکورد از بانک گرفته بشه؟؟ یا نه بازم همه رکوردها گرفته بشه و من توی زیرروال بیام رکوردهایی رو که میخوام مثلا داخل یه datatable دیگه کپی کنم و اونوقت datatable جدید رو که فقط چند تا رکورد داره رو به گرید بایند کنم؟
منظور:آیا در هر بار که یکی از page های گرید(شماره هایی که زیر صفحه نشون داده میشه) کلیک میشه باید همه رکوردها از database واکشی بشه یا فقط رکوردهای مربوط به اون شماره صفحه!

اگه یه مثال هم بزارید خوبه.مرسی
ببينيد من كه گفتم اصلا نيازي نيست در زيروال تون فيلدهاي قابل نمايش در گريد را مشخص كنيد شما ميتونيد يه select روي تيبل تون بزنيد اونوقت در هنگام فراخواني زيرروال خودش فيلدهايي كه در قسمت itemtemplate‌هاي گريد مشخص كرديد نشون ميده!!!
مانند مثال زير :




Sub ShowGridview()

con.ConnectionString = ConfigurationManager.ConnectionStrings("dbName").ToString()
Dim da As New SqlDataAdapter
Dim ds As New DataSet
con.Open()
Dim strsql As String = "SELECT * from tblName "
da = New SqlDataAdapter(strsql, con)
da.Fill(ds, "tblName")
GShowList.DataSource = ds
GShowList.DataBind()
con.Close()

End Sub

A.S.Roma
سه شنبه 20 بهمن 1388, 11:53 صبح
سلام آیا نمی شه این صفحه بندی رو بدون گرید ویو انجام داد؟ مثلا صفحه بندی همین سایت چه جوری انجام شده؟
می تونید از ListView استفاده کنید.

ضمن اینکه DataPager نیز برای صفحه بندی تعبیه شده !
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datapager.aspx

mahdi87_gh
سه شنبه 20 بهمن 1388, 14:48 عصر
ببینید من که گفتم اصلا نیازی نیست در زیروال تون فیلدهای قابل نمایش در گرید را مشخص کنید شما میتونید یه select روی تیبل تون بزنید اونوقت در هنگام فراخوانی زیرروال خودش فیلدهایی که در قسمت itemtemplate‌های گرید مشخص کردید نشون میده!!!
مانند مثال زیر :

کد:

Sub ShowGridview()

con.ConnectionString = ConfigurationManager.ConnectionStrings("dbName").ToString()
Dim da As New SqlDataAdapter
Dim ds As New DataSet
con.Open()
Dim strsql As String = "SELECT * from tblName "
da = New SqlDataAdapter(strsql, con)
da.Fill(ds, "tblName")
GShowList.DataSource = ds
GShowList.DataBind()
con.Close()

End Sub


فکر میکنم منطور من رو درست متوجه نشدین؛الان کدی که شما گذاشتین من میدونم کارش چیه!و نحوه بایند کردن اطلاعات به گرید رو بلد هستم!!کدی که شما گذاشتین همه رکوردهای داخل بانک رو واکشی می کنه. که سوال منم همین بود:آیا درهربار کلیک همه رکوردها واکشی می شوند یا فقط تعداد خاصی رکورد؟که کد شما همه رکوردها رو واکشی میکنه. حالا این پرسش مطرح میشه که آیا وقتی که تعداد رکوردهای داخل بانک زیاد باشه، اینکار بازدهی و عملکرد سایت رو کند نمی کنه؟؟آیا روش بهینه تری برای این کار وجود داره؟

aserfg
سه شنبه 20 بهمن 1388, 16:15 عصر
جناب samare دستت درد نکنه فقط اگه می شه پارامترهای این زیر روال یعنی
ByVal s As Object, ByVal e As GridViewPageEventArgs
مخصوصا پارامتر e وهمچنین کد
GridView1.PageIndex = e.NewPageIndex
توضیح بده .ممنون

SAMARE
چهارشنبه 21 بهمن 1388, 10:17 صبح
جناب samare دستت درد نکنه فقط اگه می شه پارامترهای این زیر روال یعنی
ByVal s As Object, ByVal e As GridViewPageEventArgs
مخصوصا پارامتر e وهمچنین کد
GridView1.PageIndex = e.NewPageIndex
توضیح بده .ممنون
e پارامتري از نوع رويداد پيج گريدويو هست يعني وقتي روي شماره صفحه گريد كليك ميشه اين رويداد فراخواني ميشه

اين كد هم مياد ايندكس پيج گريدويو رو به ايندكس جديد كه روي اون كليك ميشه تغيير ميده!!!

SAMARE
چهارشنبه 21 بهمن 1388, 10:22 صبح
آیا وقتی که تعداد رکوردهای داخل بانک زیاد باشه، اینکار بازدهی و عملکرد سایت رو کند نمی کنه؟؟آیا روش بهینه تری برای این کار وجود داره؟

اگر خيلي نگران اين موضوع هستيد خوب شما فقط فيلدهايي كه ميخواييد داخل گريد نمايش بديد رو در دستور select‌تون ذكر كنيد!!!

ولي فكر نكنم تاثيري در عملكرد سايت داشته باشه!!!

A.S.Roma
چهارشنبه 21 بهمن 1388, 11:01 صبح
فکر میکنم منطور من رو درست متوجه نشدین؛الان کدی که شما گذاشتین من میدونم کارش چیه!و نحوه بایند کردن اطلاعات به گرید رو بلد هستم!!کدی که شما گذاشتین همه رکوردهای داخل بانک رو واکشی می کنه. که سوال منم همین بود:آیا درهربار کلیک همه رکوردها واکشی می شوند یا فقط تعداد خاصی رکورد؟که کد شما همه رکوردها رو واکشی میکنه. حالا این پرسش مطرح میشه که آیا وقتی که تعداد رکوردهای داخل بانک زیاد باشه، اینکار بازدهی و عملکرد سایت رو کند نمی کنه؟؟آیا روش بهینه تری برای این کار وجود داره؟
روش بهینه تر اینه که Paging را در SQL انجام دهید . که دوست خوبم LastPhoenix در این تایپک مفصلا" توضیح داده اند :
http://barnamenevis.org/forum/showthread.php?t=199437

fa_karoon
چهارشنبه 21 بهمن 1388, 20:06 عصر
من می خوام تو سایتم سیستمی مانند صفحه بندی همین سایت یا مثل گوگل پیاده کنم که مثلا در صفحه اول به وسیله دستور top 5 تا رکورد اول (منظور به لحاظ زمان درج جدیدتر باشند) نشان داده شود و کاربر با کلیک روی عدد به صفحه دوم برود و 5 تا رکورد بعد رو ببینه اما نمی خوام از گرید ویو و این قبیل چیزها استفاده کنم
لطفا کمک کنید که چه جوری می تونم این کار رو انجام بدم(اگه رفرنس یا دستور خاصی باید استفاده کنم لطفا ذکر کنید)(آیا بازهم می شه از DataPager استفاده کرد؟)

mahdi87_gh
چهارشنبه 21 بهمن 1388, 20:45 عصر
من از دستور زیر استفاده کردم ولی نمیدونم چرا دفعه اولی که روی شماره صفحه ها کلیک می کنم به اون صفحه منتقل نمیشه ولی بار دوم که روی اون شماره کلیک می کنم میره به اون صفحه!!!برای همه شماره صفحه ها همینطور عمل میکنه!! من توی در حالت debug نگاه کردم، دفعه اول که کلیک می کنم ایندکس عوض میشه ولی به اون صفحه نمیره!
دلیلش میتونه چی باشه؟
این کد منه:

private int THUMBNAIL_SIZE = 60;
protected void Page_Load(object sender, EventArgs e)
{
try
{
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM News ORDER BY id DESC", DbConnection.ObjConnection);
DataTable tbl = new DataTable();
da.Fill(tbl);
GridView1.DataSource = tbl;
GridView1.DataBind();
}
catch { }
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow )
{
string id = ((DataRowView)e.Row.DataItem).Row.ItemArray[0].ToString();

// get a reference to the image used for the bar in the row
Label title = null;
title = (Label)(e.Row.FindControl("lbltitle"));
title.Text = ((DataRowView)e.Row.DataItem).Row.ItemArray[1].ToString().Trim();

Label matn = null;
matn = (Label)(e.Row.FindControl("lblmatn"));
string txt = ((DataRowView)e.Row.DataItem).Row.ItemArray[2].ToString().Trim();
LiteralControl l = new LiteralControl();
string strmatn = "";
bool htmltag = false;
foreach (char ch in txt.ToCharArray())
{
if (ch == '<') htmltag = true;
if (ch == '>')
{
htmltag = false; strmatn += " "; continue;
}
if (htmltag) continue;

strmatn += ch;
}
matn.Text = strmatn.Substring(0, 5) + " ...";

System.Web.UI.WebControls.Image img = null;
img = (System.Web.UI.WebControls.Image)
(e.Row.FindControl("imgThumbnail"));

byte[] pic = (byte[])((DataRowView)e.Row.DataItem).Row.ItemArray[3];
//System.IO.MemoryStream ms = new MemoryStream();
//ms.Write(pic, 0, pic.Length);
//string mssession = "ms" + id;
//Session[mssession] = ms;
//Session["imageready"] = "ok";
string picdatasession = "picdata" + id;
Session[picdatasession] = pic;

ThumbFromID.THUMBNAIL_SIZE = this.THUMBNAIL_SIZE;
ThumbFromID.USE_SIZE_FOR_HEIGHT = false;
// set the source to the page that generates the thumbnail image
img.ImageUrl = ThumbFromID.PAGE_NAME + "?" +
ThumbFromID.IMAGE_ID + "=" + id;
img.ImageAlign = ImageAlign.Middle;

//ms.Close();

HyperLink conti = null;
conti = (HyperLink)(e.Row.FindControl("continue"));
conti.NavigateUrl = "~/Title.aspx?id=" + id;
}
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
try
{
GridView1.PageIndex = e.NewPageIndex;
}
catch { }
}

aserfg
پنج شنبه 22 بهمن 1388, 16:03 عصر
e پارامتری از نوع رویداد پیج گریدویو هست یعنی وقتی روی شماره صفحه گرید کلیک میشه این رویداد فراخوانی میشه

این کد هم میاد ایندکس پیج گریدویو رو به ایندکس جدید که روی اون کلیک میشه تغییر میده!!!
بعد از این کار و فراخوانی تابعshowdata
این کد چطور اطلاعات صفحه اول رو دوباره به این صفحه اضافه نمی کنه یعنی از کجا متوجه می شه که اطلاعات 5 کورد بعدی رو باید بخونه

mmnoody2006
پنج شنبه 22 بهمن 1388, 19:56 عصر
این روش های بچه گانه رو رها کنید
بهترین روش روش آقای بهروز خانه در این آدرس
http://barnamenevis.org/forum/showthread.php?t=50594