PDA

View Full Version : غیب شدن GridView !!!



federrer
دوشنبه 22 مرداد 1386, 00:48 صبح
وقتی می خوام برم به صفحه دوم ، GridView غیب میشه !!!!





public void BindGridView()
{
string CS = (string)ConfigurationManager.AppSettings["ConString"];
SqlConnection Cnn = new SqlConnection(CS);

string strsql = "select * from T1 ";

SqlDataAdapter SDR = new SqlDataAdapter(strsql, Cnn);

try
{
Cnn.Open();

DataSet DS = new DataSet();
SDR.Fill(DS, "T1");
GridVeiw.DataSource = DS.Tables["T1"].DefaultView;
GridVeiw.DataBind();
}
catch (SqlException ex)
{
Response.Write(ex.Message.ToString());
}
finally
{

if ((Cnn.State != ConnectionState.Closed)) Cnn.Close();
}

}


protected void Button1_Click(object sender, EventArgs e)
{
BindGridView();
}


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



خاصیت AllowPaging برابر True است .مشکل کجاست ؟؟

babi_wd
دوشنبه 22 مرداد 1386, 01:16 صبح
محتویات Page_load هم بزار

federrer
دوشنبه 22 مرداد 1386, 04:53 صبح
محتویات Page_load هم بزار


تو Page_Load هیچی نذاشتم .

وقتی رو Button1 کلیک میشه ، Grid View اطلاعات رو نشون میده !

راستی DataSource به GridView اختصاص ندادم . تو این حالت نیازه ؟؟؟

MH2538
دوشنبه 22 مرداد 1386, 06:11 صبح
سلام
من در مورد مشکل اولتون چیزی نمی دونم ولی می خواستم بدونم با اینکه در وب غالباً از DataReader استفاده می شود نه DataSet (بنا به‌دلایل فنی خودش) چرا شما از DataSet استفاده کردید. آیا دلیل خاصی وجود دارد؟

anubis_ir
دوشنبه 22 مرداد 1386, 07:49 صبح
@MH2538
با DataReader امکان paging در حالتیکه از توانایی‌های ذاتی گریدویو نیاز به استفاده باشد، نیست.

@federrer
در روال GridView_PageIndexChanging بجای GridVeiw.DataBind باید بنویسی BindGridView . یادت باشه صفحات وب زمانی که کارشان به پایان می‌رسد ، همه اشیاء را تخریب می‌کنند بنابراین در صفحه دوم خبری از اشیاء صفحه اول نیست.

hojabri
دوشنبه 22 مرداد 1386, 07:50 صبح
کدتون رو به این شکل تغییر بدید(یعنی قبل از Databind سابروتین BindGridView رو هم صدا بزنید.):


protected void GridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
BindGridView();
GridVeiw.PageIndex = e.NewPageIndex;
GridVeiw.DataBind();
}

federrer
دوشنبه 22 مرداد 1386, 14:34 عصر
@MH2538
با DataReader امکان paging در حالتیکه از توانایی‌های ذاتی گریدویو نیاز به استفاده باشد، نیست.



از توضیح شما ممنونم.

در مورد پیشنهادی که دوستمون MH2538 داشتن . اکثر مثالهایی که دیدم برای خوندن دیتا از جدول و نمایش تو GridView از DataReader استفاده کرده بودن !!!


در چه مواقعی از DataReader استفاده کنیم بهتره ؟؟؟

در مورد توانایی‌های ذاتی گریدویو یه توضیح بدید ، خیلی خوبه . مرسی

federrer
دوشنبه 22 مرداد 1386, 20:35 عصر
یه توضیح بدید ، خیلی خوبه

MH2538
سه شنبه 23 مرداد 1386, 09:27 صبح
سلام
در مورد تفاوت بین DataSet و DataReader موارد زیادی وجود داره . هر کدوم معایب و مزایایی دارند که به جای خودشون در نظرگرفته و یا از اونها صرفنظر میشه.
مثلاً :
DataSet :‌مزیت :‌ یکبار به بانک مراجعه می کند و تمامی اطلاعات مورد نظر شما را خوانده و بانک را رها میکند.
مسلماً این امکان بیشتر بدرد WinApplication می خورد.زیرا حافظه‌ای که برای بارگیری اطلاعات در دیتاست و نگهداری آن در دیتاست گرفته می‌شود در سیستم کاربر است و به سرور و حافظه آن فشار وارد نمی شود.ضمن اینکه با یکبار مراجعه اطلاعاتی را که لازم داریم بارگیری می‌کنیم و مجدداً به سراغ بانک نمی‌رویم (این مورد در دریتاریدر بررسی می‌شود).
عیب : مشکل دیتاست دقیقاً‌در همان مزیت آن است. اینجاست که محل بکارگیری کنترل‌ها و اشیاء کاربرد آن را نمایان می‌کند. منظور من WebApplication است. وقتی که شما در حال تولید یک وب‌فرم هستید تمام تراکنش‌های مربوط به دیتابیس در سروری که صفحات ASP.Net خود را ذخیره کرده‌اید انجام می‌شود. حالا فرض کنید 1000 کاربر همزمان به یک صفحه خاص مراجعه‌کنند (مانند گزارشات‌ مالی بانک‌ها) اگر قرار باشد برای هرکدام از آنها دیتاست تمام اطلاعات را وارد دیتاست نماید (در حالی که هر کاربر قاعدتاً در هر صفحه تعداد خاصی تراکنش مالی را مشاهده‌ می‌کند و بقیه تراکنش ها را صفحه به صفحه می بیند مثلاً 50 تراکنش در هر صفحه) مشخص است که سرور هر چقدر هم که قوی باشد با مشکل کمبود حافظه موقت مواجه خواهد‌شد و اینجاست که گفته می‌شود سرور کند شده‌است در حالی که اشکال از دستورات‌ برنامه نویسی بوده‌است.
اشغال پهنای باند به منظور انتقال اطلاعات از لایه دیتابیس به لایه میانی در حالی که تمام پهنای اطلاعات روی باند قرار گرفته مورد نیاز نبوده است مثلاً 1000 رکرود به لایه میانی (BusinessLayer) انتقال پیدا می کند در حالی که در فرمی که برای کاربر ایجاد شده است تنها 50 رکردو نمایش داده می شود و مابقی به صفحات بعد موکول می شوند تا در صورت تمایل کاربر آنها نیز صفحه به صفحه نمایش داده شوند.این عیب در مورد هر دو گزینه winApplication و WebApplication قابل طرح است.
Datareader : مزیت :‌هربار تعداد خاصی رکورد اطلاعاتی را از دیتابیس می خواند بنابراین با مشکل حجم بالای اطلاعاتی که ممکن است در آینده کاربر به آنها رجوع کند (صفحات۲ به بعد در مثال تراکنش مالی) مواجه نخواهیم شد. بنابراین برای صفحات وب بسیار مناسب است. تنها عیب مراجعه مکرر به دیتابیس است.
عیب:‌دوباره بر می‌گردیم به سمت WinApplication وقتی قرار است حافظه صرف شده برای دیتاست در سیستم کاربر باشد دلیلی برای مراجعات مکرر وجود ندراد و در گیر ماندن دیتابیس تا زمانی که دیتاریدر را ببندیم وجود نخواهد داشت پس اینبار از دیتاست استفاده می کنیم تا مراجعات ما به بانک اطلاعاتی کمتر شود یعنی یکبار مراجعه برای هر پرس‌و‌جو (Query).
در مورد حرفی که دوست خوبمون گفته بود :‌Paging در DataReader قابل استفاده نیست باید عرض کنم چون تخصص من WinAplpication است و نه WebApplication چیز زیادی نمی تونم بگم ولی یک آدرس می دم مراجعه کنید و بخونید تاببینید مشکل Paging با DataReader وجود نداره و این یک موضوع حل شده است.
http://www.developerfusion.co.uk/show/5292/