PDA

View Full Version : Paging در GridView



m_amin_t
سه شنبه 18 خرداد 1389, 12:36 عصر
سلام
من یه عملیات جستجو رو انجام میدم و نتیجه رو توی یک Gridview میریزم که خاصیت صفحه بندی اون فعال هستش.
حالا وقتی کاربر میخواد بره صفحه ی بعدی از Gridview پیغام خطای زیر رو میده:

The GridView 'GridView1' fired event PageIndexChanging which wasn't handled
با جستجویی که کردم متوجه شدم که رویداد PageIndexChanging رو باید دستی کنترل کنم، بنابراین توی این رویداد، این کد رو نوشتم:

GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
حالا دیگه اون پیغام خطا رو نمیده ولی وقتی به صفحه ی بعد میریم دیگه کلا Gridview نمایش داده نمیشه!!
مشکل از کجاست؟

blackcats
سه شنبه 18 خرداد 1389, 13:24 عصر
دلیلی برای set کردن نداره باید کار کنه من تاحالا این چنین مشکلی نواشتم.
خیلی هم با گرید ویو کار کردم

m_amin_t
سه شنبه 18 خرداد 1389, 14:02 عصر
منم با اینکه زیاد ازش استفاده کرده بودم ولی اولین باره که به این مورد برخورد میکنم.

m_amin_t
سه شنبه 18 خرداد 1389, 17:25 عصر
:متفکر::عصبانی++::اشتباه::گیج:

hamedsabzian
سه شنبه 18 خرداد 1389, 18:04 عصر
کد GridView رو بزار!

m_amin_t
سه شنبه 18 خرداد 1389, 18:44 عصر
این کد گریدویو:

<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" CellPadding="4"
ForeColor="#333333" GridLines="None"
Width="100%" Font-Size="Small" PageSize="20" DataKeyNames="id"
onrowdatabound="GridView1_RowDataBound"
onpageindexchanging="GridView1_PageIndexChanging" >
<RowStyle BackColor="#EFF3FB" />
<Columns>
<asp:BoundField DataField="id" HeaderText="ردیف" InsertVisible="False"
ReadOnly="True" SortExpression="id">
<ItemStyle Width="40px" />
</asp:BoundField>
<asp:BoundField DataField="question" HeaderText="پرسش"
SortExpression="question" />
</Columns>
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#2461BF" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>اینم رویداد:

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

Vahid_moghaddam
سه شنبه 18 خرداد 1389, 18:56 عصر
کد زیر رو امتحان کنید:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataSource=yourDataSourceID;
GridView1.DataBind();
}

m_amin_t
سه شنبه 18 خرداد 1389, 19:20 عصر
کد زیر رو امتحان کنید:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataSource=yourDataSourceID;
GridView1.DataBind();
}
دیتاسورس من یک بار اون هم توی تابع جستجو پر میشه و توی این رویداد بهش دسترسی ندارم. مگه اینکه توی این رویداد دوباره عملیات جستجو روانجام بدم که فکر نمیکنم هیچ عقل سلیمی اون رو قبول کنه!

Vahid_moghaddam
سه شنبه 18 خرداد 1389, 19:22 عصر
دیتاسورس من یک بار اون هم توی تابع جستجو پر میشه و توی این رویداد بهش دسترسی ندارم. مگه اینکه توی این رویداد دوباره عملیات جستجو روانجام بدم که فکر نمیکنم هیچ عقل سلیمی اون رو قبول کنه!

می شه کدش رو بذارید؟ کد کامل قسمتی که datasource رو برای گریدویو مشخص می کنید.

rana-writes
سه شنبه 18 خرداد 1389, 19:23 عصر
سلام
ببخشین یه سوال
من وقتی از Paging استفاده میکنم اصلا هیچ کدی توی این رویداد نمی نویسم و گریدم به طور خودکار تو صفحات بعدی میره
البته من هنوز سایتم رو آپلود نکردم، یعنی حتما باید این کد اونجا نوشته بشه؟
و حالا که دارم جواب میگیرم بدون نوشتن این کد جریان چطوریه؟ یعنی داره الکی اجرا میشه و بعد به مشکل برمیخورم؟
ولی داده هام رو درست نمیشه
ممنون از راهنماییتون

Vahid_moghaddam
سه شنبه 18 خرداد 1389, 19:35 عصر
دیتاسورس من یک بار اون هم توی تابع جستجو پر میشه و توی این رویداد بهش دسترسی ندارم. مگه اینکه توی این رویداد دوباره عملیات جستجو روانجام بدم که فکر نمیکنم هیچ عقل سلیمی اون رو قبول کنه!
شما وقتی index صفحه رو عوض می کنید و دستور DataBind رو می نویسید، گریدویو اطلاعاتش رو از کدوم DataSource می گیره؟ متوجه منظورم می شید؟ شما با اون تابع جستجو DataSource رو پر می کنید، به گریدویو وصلش می کنید و گریدویو دارای مقدار می شه. اما وقتی index رو عوض می کنید، یه در خواست تازه به سرور می فرستید و کلاس مربوط به صفحه aspx دوباره new می شه.

m_amin_t
سه شنبه 18 خرداد 1389, 19:35 عصر
می شه کدش رو بذارید؟ کد کامل قسمتی که datasource رو برای گریدویو مشخص می کنید.
اینجاست:

DataSet ds = new DataSet();
objDataAdapter.SelectCommand.Connection.Open();
objDataAdapter.Fill(ds);
objDataAdapter.SelectCommand.Connection.Close();
GridView1.DataSource = ds;
GridView1.DataBind();
سلام
ببخشین یه سوال
من وقتی از Paging استفاده میکنم اصلا هیچ کدی توی این رویداد نمی نویسم و گریدم به طور خودکار تو صفحات بعدی میره
البته من هنوز سایتم رو آپلود نکردم، یعنی حتما باید این کد اونجا نوشته بشه؟
و حالا که دارم جواب میگیرم بدون نوشتن این کد جریان چطوریه؟ یعنی داره الکی اجرا میشه و بعد به مشکل برمیخورم؟
ولی داده هام رو درست نمیشه
ممنون از راهنماییتون

منم تا قبل از این با اینکه زیاد از گریدویو استفاده کرده بودم بهش برنخورده بودم

Vahid_moghaddam
سه شنبه 18 خرداد 1389, 19:36 عصر
سلام
ببخشین یه سوال
من وقتی از Paging استفاده میکنم اصلا هیچ کدی توی این رویداد نمی نویسم و گریدم به طور خودکار تو صفحات بعدی میره
البته من هنوز سایتم رو آپلود نکردم، یعنی حتما باید این کد اونجا نوشته بشه؟
و حالا که دارم جواب میگیرم بدون نوشتن این کد جریان چطوریه؟ یعنی داره الکی اجرا میشه و بعد به مشکل برمیخورم؟
ولی داده هام رو درست نمیشه
ممنون از راهنماییتون


اگه شما دارید از SqlDataSource یا کنترل های مشابه استفاده می کنید و run time دیتاسورس رو به گرید Bind نمی کنید، مشکلی بوجود نمیاد

m_amin_t
سه شنبه 18 خرداد 1389, 19:38 عصر
شما وقتی index صفحه رو عوض می کنید و دستور DataBind رو می نویسید، گریدویو اطلاعاتش رو از کدوم DataSource می گیره؟ متوجه منظورم می شید؟ شما با اون تابع جستجو DataSource رو پر می کنید، به گریدویو وصلش می کنید و گریدویو دارای مقدار می شه. اما وقتی index رو عوض می کنید، یه در خواست تازه به سرور می فرستید و کلاس مربوط به صفحه aspx دوباره new می شه.
خوب یعنی با این حساب باید عملیات جستجو رو هر بار از اول انجام بدم؟؟؟؟؟؟

Vahid_moghaddam
سه شنبه 18 خرداد 1389, 19:49 عصر
اینجاست:

DataSet ds = new DataSet();
objDataAdapter.SelectCommand.Connection.Open();
objDataAdapter.Fill(ds);
objDataAdapter.SelectCommand.Connection.Close();
GridView1.DataSource = ds;
GridView1.DataBind();منم تا قبل از این با اینکه زیاد از گریدویو استفاده کرده بودم بهش برنخورده بودم

مشکل شما همونیه که گفتم. برای امتحان توی رویداد PageIndexChanging کد زیر رو قبل از DataBind اضافه کنید.


object o=GridView1.DataSource;


کد رو Trace کنید و ببینید مقدار o برابر null هست یا نه.

Vahid_moghaddam
سه شنبه 18 خرداد 1389, 19:52 عصر
خوب یعنی با این حساب باید عملیات جستجو رو هر بار از اول انجام بدم؟؟؟؟؟؟

بله. و برای کاهش تراکنش ها با DataBase می تونید از Cache کردن داده ها استفاده کنید. استفاده از کنترل هایی مثل SqlDataSource و ObjectDataSource هم امکان Cache کردن رو به شما می دن.

موفق باشید

Vahid_moghaddam
سه شنبه 18 خرداد 1389, 19:55 عصر
درسته null هستش ولی راه حل چیه؟ از اول عملیات جستجو رو انجام بدم؟؟
پست قبلی رو بخونید