ورود

View Full Version : سوال: مشکل در دیتاگرید



ba1373
پنج شنبه 14 بهمن 1395, 15:42 عصر
سلام
من در دیتا گرید wpf مشکل داشتم
من چون اطلاعاتم زیاد هست و دیتا گریدم کوچیک هست برام پیغام خطا میده.در واقع من میخوام به تک تک خونه های این دیتا گرید با استفاده از دستور for دسترسی داشته باشم و مقادیر اونها رو با for بین ویندو ها جا به جا کنم ولی دیتا گرید فقط اون حجم از اطلاعاتی رو میفرسته که قابل نمایش باشه براش و یه جورایی قابلیت اسکرول نداره دیتا گرید و برنامه خطای null به من میده
لطفا راهنماییم کنین.
با تشکر

AbbasSediqi
جمعه 15 بهمن 1395, 00:02 صبح
دوست گرامی با سلام

لطفا نمونه کد قرار بدید چون بنده از توضیحات شما کامل متوجه ایراد نشدم

ba1373
جمعه 15 بهمن 1395, 10:41 صبح
سلام
یه پروژه جدیدو فرض کنید که با استفاده از متد زیر اطلاعاتی رو از یه جدول sql توی یه دیتا گرید نشون میدیم
private void ShowStudentTable()
{
var query = database.Database.SqlQuery<vw_Students>("select * from vw_Students where StudentActive = 1");
var u = query.ToList();
dataGrid_all.ItemsSource = u;
lbl_addcount.Content = dataGrid_all.Items.Count;
}
یک نکته ای که هست اینه که من دیتا گریدم یه اندازه خاصی رو داره و اگر اطلاعاتمون زیاد بشه برای دیدن خود کاربر نیاز داره که با استفاده از اسکرول خود دیتا بقیه اطلاعات رو ببینه
حال من میخوام با استفاده از کد زیر که توی رویداد کلیک تعریف شده تک تک رکورد ها رو به فرم دیگه ارسال کنم ولی مشکل اینجاست که برنامه فقط اونایی رو ارسال میکنه که توی محدوده اندازه خود دیتا گرید هست. و بعد از محدوده رو ازسال نمیکنه و پیغام null رو نشون میده.من تست کردم اندازه دیتا گرید رو بزرگ کردم برنامه کامل اجرا شد و لی خب ما نمیتونیم این کارو کنیم چون حجم اطلاعات ممکنه خیلی زیاد بشه

private void btn_newdeclaration_Click(object sender, RoutedEventArgs e)
{
int count = dataGrid_all.Items.Count;
for(int i = 0;i<=count -1;i++)
{
win_GrandActive w_ga = new win_GrandActive();
w_ga.GrandID = GrandID;
w_ga.StudentID = Convert.ToInt32((dataGrid_all.Columns[0].GetCellContent(dataGrid_all.Items[i]) as TextBlock).Text);
w_ga.StudentName = (dataGrid_all.Columns[1].GetCellContent(dataGrid_all.Items[i]) as TextBlock).Text;
w_ga.ShowDialog();
}

}

AbbasSediqi
جمعه 15 بهمن 1395, 12:01 عصر
دوست گرامی روش کارتون اشتباهه

در فرم دیگه که نیاز به این اطلاعات هست ، با استفاده از دستورات sql اطلاعاتی رو میخواهید بگیرید

چرا برای این کار سعی دارید از دیتاگرید اطلاعات رو برگردونید؟

ba1373
جمعه 15 بهمن 1395, 12:04 عصر
دوست گرامی روش کارتون اشتباهه

در فرم دیگه که نیاز به این اطلاعات هست ، با استفاده از دستورات sql اطلاعاتی رو میخواهید بگیرید

چرا برای این کار سعی دارید از دیتاگرید اطلاعات رو برگردونید؟
حالا این به کنار.من جای دیگه یه دیتاگرید رو یه ستون چک باکس بهش اضاف کردم باز هم همین وضعه که میخواد تک تک رکورد ها رو از دیتا بیس بخونه و چک کنه و اونایی که چک خوردن رو چک بزنه یا برعکس .میخوام اونایی که چک خوردن رو تو دیتا بیس ذخیره کنه باز هم خطا میده.کلا من به نظرم این باید یه راه حلی داشته باشه اینطوری نمیشه.

AbbasSediqi
جمعه 15 بهمن 1395, 12:10 عصر
در ضمن دوست گرامی برای دریافت اطلاعات به صورت سطری از دیتا گرید بهتره از این خط استفاده کنی


foreach (DataRowView row in dataGrid.Items)
{
string text = row.Row.ItemArray[index].ToString();
}

ba1373
جمعه 15 بهمن 1395, 12:33 عصر
در ضمن دوست گرامی برای دریافت اطلاعات به صورت سطری از دیتا گرید بهتره از این خط استفاده کنی


foreach(DataRowView row in dataGrid.Items)
{
string text = row.Row.ItemArray[index].ToString();
}
میشه معادل همون حلقه for که من نوشتم توی foreach بگین؟چون من با این دستور اشنایی ندارم.اگه بگین بهتر میتونم درکش کنم

AbbasSediqi
جمعه 15 بهمن 1395, 12:43 عصر
foreach(DataRowView row in dataGrid.Items)
{
string text = row.Row.ItemArray[index].ToString();
}



دوست گرامی index در این دستور همون شماره column

مثال شماره ستون
StudentID برابر میشه با 0

w_ga.StudentID = text

ba1373
شنبه 16 بهمن 1395, 11:14 صبح
foreach(DataRowView row in dataGrid.Items)
{
string text = row.Row.ItemArray[index].ToString();
}



دوست گرامی index در این دستور همون شماره column

مثال شماره ستون
StudentID برابر میشه با 0

w_ga.StudentID = text

مشکل حل شد.فقط کافی بود توی قسمت خواص datagrid توی xaml این دستور رو اضاف میکردم.VirtualizingStackPanel.IsVirtualizing ="False"