PDA

View Full Version : معرفی کتاب



sin
شنبه 14 مهر 1386, 16:41 عصر
سلام
به نظر شما برای معرفی کتاب به صورتی که اسم کتاب و نام نویسنده و ناشر به ترتیب زیر هم قرار بگیرند بطوری که مشخصات چند کتاب در یک ردیف باشه باید از repeater استفاده کنم یا از datagrid

shahab_ksh
شنبه 14 مهر 1386, 16:48 عصر
به نظر من
اگه غالب دلخوه میخاین از دیتالیست استفاده کنید هر چند دیتا لیست و repeater مشکل پیجینگ را دارید البته در 2005 و 2003

sama01
شنبه 14 مهر 1386, 17:13 عصر
چرا فقط از dataList‌ استفاده نشه؟ نیازی به repeater نیست.

shahab_ksh
شنبه 14 مهر 1386, 18:01 عصر
چرا فقط از dataList‌ استفاده نشه؟ نیازی به repeater نیست


شما پست من رو یه بار دیگه با دقت بخونید سوال شما بی مورده !

sin
یک شنبه 15 مهر 1386, 08:37 صبح
ممنون ولی اگه بخوام paging هم داشته باشم چی؟
من همیشه برای موارد دیگه از datagrid استفاده کردم ولی فکر نکنم grid اینکار رو بتونه.

mr_mtc
یک شنبه 15 مهر 1386, 12:52 عصر
من هم همین مشکل رو دارم
ولی برای ایجاد DataList و Repeapter علاقه ای به استفاده از ویزارد ندارم
امکانش هست کسی کد ایجادش رو برام اینجا بذاره یا راهنماییم کنه

abadanboy
یک شنبه 15 مهر 1386, 13:03 عصر
با سلام
repeater رو می شه به راحتی page بندی کرد کار نداره فقط باید یه الگوریتم توپ بنویسی
برای کاری که گفتی هم می تونی از دیتالیست استفاده کنی هم از repeater
یه جستجو تو سایت بکن راجب page بندی بحث شده اگه چیزی پیدا نکردی بگو تا کدشو برات بزارم
البته کد repeater و با زیان C#

mr_mtc
یک شنبه 15 مهر 1386, 13:16 عصر
راستشو بخواین من این چند روزه زیاد سرچ کردم هم اینجا و هم تو ASP.net
ولی تا حالا کدی پیدا نکردم

نمیدونم شاید من کم حوصله ام

mohi_ka2
یک شنبه 15 مهر 1386, 13:38 عصر
ممنون ولی اگه بخوام paging هم داشته باشم چی؟
من همیشه برای موارد دیگه از datagrid استفاده کردم ولی فکر نکنم grid اینکار رو بتونه.
سلام
چرا Datagride هم می تونه paging داشته باشه .کافیه خاصیت AlloPaging رو True کنی. والبته یک کد هم داره که می تونی اینطوری بنویسی :

protectedvoid dg1_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
dg1.CurrentPageIndex = e.NewPageIndex;
dg1.DataBind();
}

shahab_ksh
یک شنبه 15 مهر 1386, 15:59 عصر
این یکی از روشهاست !

یکی از موضوعاتی که معمولا برنامه نویسان محیط ASP.NET با آن مواجه هستند صفحه بندی اطلاعات دریافتی از دیتابیس درون GridView است ( که براحتی قابل انجام هست) . از طرفی در بسیاری از مواقع دوست داریم اطلاعات رو در بیش از یک ستون نمایش دهیم که مجبوریم از کنترل DataList استفاده کنیم چون GridView خاصیت RepeatColumns رو نداره و دقیقا مشکل همین جاست زیرا DataList هم خاصیت paging رو نداره . بنابراین برای استفاده از هر دو خاصیت RepeatColumns و paging به مشکل بر خواهیم خورد . در این مقاله مختصر آموزشی قصد دارم راه حلی بسیار ساده و البته اصولی رو براتون شرح بدم که مشکل فوق رو براحتی حل می کنه .
در دات نت کلاسی با عنوان PagedDataSource در System.Web.UI.WebControls namespace وجود داره که قابلیت paging رو برای کنترل های دات نت فراهم می کنه . ما با استفاده از این کلاس خاصیت paging رو به کنترل DataList اضافه می کنیم . (این مطلب در مورد Repeater هم صادق هست)
ابتدا یک پروژه وب سایت ایجاد کنید و در صفحه Default.aspx کدهای HTML زیر را وارد کنید :



<table width="100%" border="0">
<tr>
<td> DataList control with Paging</td>
</tr>
<tr>
<td> <asp:label id="lblCurrentPage" runat="server"></asp:label></td>
</tr>
<tr>
<td> <asp:button id="cmdPrev" runat="server" text=" << " OnClick="cmdPrev_Click"></asp:button>
<asp:button id="cmdNext" runat="server" text=" >> " OnClick="cmdNext_Click"></asp:button></td>
</tr>
</table>
<asp:DataList ID="dlPaging" runat="server" RepeatColumns="2">
<ItemTemplate>
<asp:Image ID="img1" runat="server" ImageUrl='<%#DataBinder.Eval(Container.DataItem,"imageURL") %>' />
<asp:Label ID="Label2" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"imageName") %>'></asp:Label>
</ItemTemplate>
</asp:DataList>


حالا میریم به Code View :
در متد Page_Load کد زیر را وارد می کنیم



if (!IsPostBack)
{
FetchDataToDataList();
}


و سپس کد مربوط به متد FetchDataToDataList :




private void FetchDataToDataList()
SqlConnection con = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=yourDataBase;Data Source=YourServer");
SqlCommand cmd = new SqlCommand("select imageUrl,imageName from imageTable", con);
con.Open();
PagedDataSource pagedDS = new PagedDataSource();
DataTable dt = new DataTable("_T");
dt.Load( cmd.ExecuteReader());
pagedDS.DataSource =dt.DefaultView;
pagedDS.AllowPaging = true;
pagedDS.PageSize = 5;
pagedDS.CurrentPageIndex = CurrentPage;
dlPaging.DataSource = pagedDS;
dlPaging.DataBind();
con.Close();

lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of "+ pagedDS.PageCount.ToString();
// Disable Prev or Next buttons if necessary
cmdPrev.Enabled = !pagedDS.IsFirstPage;
cmdNext.Enabled = !pagedDS.IsLastPage;
}



همونطور که در کد بالا می بینیم ابتدا connection مورد نظر رو می سازیم و توسط sqlCommand دستور select مورد نظرمون رو اجرا می کنیم . قبل از اجرای select از کلاس PagedDataSource یک نمونه با نام pagedDS ایجاد می کنیم . همچنین یک Table با نام dt ایجاد کرده و با اجرای sqlCommand آن را پر می کینم . حالا لازمه شیئ pagedDS رو توسط dt پر کنیم و تنظیمات لازم مربوط به خاصیت paging رو براش ست کنیم .در نهایت مشخص می کنیم که CurrentPageIndex مقدار صفر داشته باشه تا صفحه اول اطلاعات در ابتدا نمایش داده شوند . و در آخر شیئ pagedDS رو به خصوصیت dlPaging.DataSource انتصاب می دیم.در اینجا لازمه درباره CurrentPage توضیح بدم .
CurrentPage یک property هست که در هر لحظه شماره صفحه جاری را در this.ViewState["_CurrentPage"] نگهداری می کنه . کد این property به شرح زیره :




public int CurrentPage
{
get
{
// look for current page in ViewState
object o = this.ViewState["_CurrentPage"];
if (o == null)
return 0; // default page index of 0
else
return (int)o;
}

set
{
this.ViewState["_CurrentPage"] = value;
}
}




حالا لازمه برای دو دگمه ای که ما رو به صفحات قبل و بعد می بره کدهای زیر رو بنویسیم :





protected void cmdPrev_Click(object sender, EventArgs e)
{
// Set viewstate variable to the previous page
CurrentPage -= 1;

// Reload control
FetchDataToDataList();
}
protected void cmdNext_Click(object sender, EventArgs e)
{
// Set viewstate variable to the previous page
CurrentPage += 1;

// Reload control
FetchDataToDataList();
}


با این روش ساده به راحتی می تونیم خاصیت paging رو به کنترل مورد نظرمون اضافه کنیم

sin
دوشنبه 23 مهر 1386, 10:44 صبح
خیلی ممنون ولی نمی دونم چرا وقتی روی یکی از دکمه های جلو و عقب که کلیک می کنم دو تا دوتا جلو و عقب میره

miladr
دوشنبه 23 مهر 1386, 14:52 عصر
فکر کنم این شیوه که شما گفتین کل دیتا رو اول از sql می گیره بعد page میکنه.
شیوه بهتر استفاده از stored procedure که یکی از دوستان تو سایت زحمت کشیده بود گذاشته بود من استفاده کردم خیلی جالب بود.
فرض کنید می خواید table با نام mytable رو page کنید.

ALTER PROCEDURE dbo.mytable
(@startRowIndex int, @maximumRows int,@type nvarchar(25))
AS
SET NOCOUNT ON;

DECLARE @mydate datetime
SET ROWCOUNT @startRowIndex
select @mydate = news_date
from news_tb
where (type=@type)
ORDER BY news_date DESC
SET ROWCOUNT @maximumRows
SELECT * FROM mytable
WHERE (news_date <= @mydate) AND (type=@type)
ORDER BY news_date DESC


news_date : تاریخ فیلد هاست
startRowIndex : شماره شروع فیلد
maximumRows : تعداد سطر هایی که بعد از فیلد شروع خاونده می شه اگه قرار در هر صفحه 10 تا فیلد نشون داده بشه این باید 10 باشه
type : می تونه وجود نداشته باشه (من برای page کردن نوع خاصی از داده ها استفاده می کنم)

اگه از یه objectdatasource استفاده کنی می تونی هر کنترلی رو page کنی فقط کافی هر دفعه
startRowIndex رو به تعداد 10 تا اضافه کنی و stored procedure رو دوباره فرا خونی کنی.
از استادی که این کد رو گذاشته بود و اسمش یادم نیست ممنونم.

snisni63
دوشنبه 23 مهر 1386, 15:28 عصر
با تشکر از پست مفیدتون
میتونم خواهش کنم یه مقدار بیشتر توضیح بدین؟ اگر امکانش باشه با ذکر یک مثال عددی (!) این مسئله رو نمایش بدین ممنون می شم.