دسترسی به سطرهای فیلتر شده Telerik GridView
دوستان من دیتا گریدم رو فیلتر میکنم اما نمیدونم چطور داده های فیلتر شده رو بریزم تو دیتا تیبل . بجا اینکه فقط داده های فیلتر شده بیان تو دیتا تیبل کل رکوردها میان تو دیتا تیبل. کد منم اینه . ممنون میشم راهنماییم کنید.
DataTable table = new DataTable("dt1");
foreach (Telerik.WinControls.UI.GridViewDataColumn column in dgv1.Columns)
{
table.Columns.Add(column.Name, typeof(string));
}
for (int i = 0; i < dgv1.Rows.Count-1; i++)
{
table.Rows.Add();
for (int j = 0; j < dgv1.Columns.Count; j++)
{
table.Rows[i][j] = dgv1.Rows[i].Cells[j].Value;
}
}
نقل قول: پر کردن datatable بعد از فیلتر datagridview
در اینگونه موارد بهترین منبع همان داکیومنت اصلی شرکتها هست.
در این مورد در سایت تلریک کد زیر را به عنوان مثال برای فیلترینگ قرار داده
DataTable dt = new DataTable();
public void FillData()
{
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
for (int i = 0; i < 30; i++)
{
dt.Rows.Add(i, "Item" + i);
}
this.radGridView1.DataSource = dt;
this.radGridView1.EnableFiltering = true;
this.radGridView1.MasterTemplate.DataView.BypassFi lter = true;
this.radGridView1.FilterChanged += radGridView1_FilterChanged;
}
private void radGridView1_FilterChanged(object sender, GridViewCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.ItemChanged)
{
dt.DefaultView.RowFilter = this.radGridView1.FilterDescriptors.Expression;
}
if (e.Action == NotifyCollectionChangedAction.Remove)
{
dt.DefaultView.RowFilter = "";
}
}
خوبی این کد این هست که فیلتر را روی دیتاتیبل هم اعمال میکند. در اینصورت شما هر جا به داده های فیلتر شده نیاز داشتید از dt.DefaultView میتونید استفاده کنید.
نقل قول: پر کردن datatable بعد از فیلتر datagridview
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
در اینگونه موارد بهترین منبع همان داکیومنت اصلی شرکتها هست.
در این مورد در سایت تلریک کد زیر را به عنوان مثال برای فیلترینگ قرار داده
DataTable dt = new DataTable();
public void FillData()
{
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
for (int i = 0; i < 30; i++)
{
dt.Rows.Add(i, "Item" + i);
}
this.radGridView1.DataSource = dt;
this.radGridView1.EnableFiltering = true;
this.radGridView1.MasterTemplate.DataView.BypassFi lter = true;
this.radGridView1.FilterChanged += radGridView1_FilterChanged;
}
private void radGridView1_FilterChanged(object sender, GridViewCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.ItemChanged)
{
dt.DefaultView.RowFilter = this.radGridView1.FilterDescriptors.Expression;
}
if (e.Action == NotifyCollectionChangedAction.Remove)
{
dt.DefaultView.RowFilter = "";
}
}
خوبی این کد این هست که فیلتر را روی دیتاتیبل هم اعمال میکند. در اینصورت شما هر جا به داده های فیلتر شده نیاز داشتید از dt.DefaultView میتونید استفاده کنید.
ممنون بابت راهنماییتون . ولی متاسفانه این کد فقط اولین رکورد جدولمو برمیگردونه . که تو فیلترم نیست :افسرده:
نقل قول: دسترسی به سطرهای فیلتر شده Telerik gridview
رویداد FilterChanged را هم ایجاد کردید؟ کد کاملتری بزارید.
نقل قول: دسترسی به سطرهای فیلتر شده Telerik gridview
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
رویداد FilterChanged را هم ایجاد کردید؟ کد کاملتری بزارید.
اینم کد های کامل
private void btnPrint_Click(object sender, EventArgs e)
{
StiReport s = new StiReport();
s.Load("Reports\\ShahrebaziReport.mrt");
s.Compile();
// s.RegData("DataSource1", Dt);
s.RegData("Shahrebazi",table);
s.Show();
}
private void dgv1_FilterChanged(object sender, GridViewCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.ItemChanged)
{
table.DefaultView.RowFilter = this.dgv1.FilterDescriptors.Expression;
}
if (e.Action == NotifyCollectionChangedAction.Remove)
{
table.DefaultView.RowFilter = "";
}
}
private void Fill()
{
foreach (Telerik.WinControls.UI.GridViewDataColumn column in dgv1.Columns)
{
table.Columns.Add(column.Name, typeof(string));
}
for (int i = 0; i < dgv1.Rows.Count - 1; i++)
{
table.Rows.Add();
for (int j = 0; j < dgv1.Columns.Count; j++)
{
table.Rows[i][j] = dgv1.Rows[i].Cells[j].Value.ToString();
}
}
this.dgv1.DataSource = table;
this.dgv1.EnableFiltering = true;
this.dgv1.FilterChanged += dgv1_FilterChanged;
}
نقل قول: دسترسی به سطرهای فیلتر شده Telerik gridview
اشتباه متوجه شدید. متد Fill متدی هست که بار اول دیتاگرید رو پر میکنید.
نقل قول: دسترسی به سطرهای فیلتر شده Telerik gridview
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
اشتباه متوجه شدید. متد Fill متدی هست که بار اول دیتاگرید رو پر میکنید.
خب منم برای بار اول دیتا رو پر میکنم تو دیتا تیبل. بعد هنگام فیلتر تو گرید ویو فیلتر درست عمل میکنه اما تو دیتا تبل فقط رکورد اول بانک اطلاعاتی نمایش داده میشه.:افسرده:
نقل قول: دسترسی به سطرهای فیلتر شده Telerik GridView
اینطور نمیشه، کدی که بار اول دیتاگرید رو پر میکنید رو هم بزارید تا اصلاح کنم.
نقل قول: دسترسی به سطرهای فیلتر شده Telerik GridView
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
اینطور نمیشه، کدی که بار اول دیتاگرید رو پر میکنید رو هم بزارید تا اصلاح کنم.
ShahrebaziDA _ShahrebaziDA = new ShahrebaziDA();
table= _ShahrebaziDA.SelectAll();
dgv1.DataSource =table;
من با این هم دیتا تیبل رو پر میکنم هم دیتا گریدم رو
نقل قول: دسترسی به سطرهای فیلتر شده Telerik GridView
به فرض که در سازنده یا formload اطلاعات از دیتابیس دریافت میشه و نام فرم Form1 باشه به صورت زیر(کافیه table.DefaultView.ToTable() را به گزارش ارسال کنید)
DataTable table;
public Form1()
{
InitializeComponent();
ShahrebaziDA _ShahrebaziDA = new ShahrebaziDA();
table = _ShahrebaziDA.SelectAll();
dgv1.DataSource = table;
dgv1.EnableFiltering = true;
dgv1.FilterChanged += dgv1_FilterChanged;
}
private void btnPrint_Click(object sender, EventArgs e)
{
StiReport s = new StiReport();
s.Load("Reports\\ShahrebaziReport.mrt");
s.Compile();
// s.RegData("DataSource1", Dt);
s.RegData("Shahrebazi", table.DefaultView.ToTable());
s.Show();
}
private void dgv1_FilterChanged(object sender, GridViewCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.ItemChanged)
{
table.DefaultView.RowFilter = this.dgv1.FilterDescriptors.Expression;
}
if (e.Action == NotifyCollectionChangedAction.Remove)
{
table.DefaultView.RowFilter = "";
}
}
نقل قول: دسترسی به سطرهای فیلتر شده Telerik GridView
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
به فرض که در سازنده یا formload اطلاعات از دیتابیس دریافت میشه و نام فرم Form1 باشه به صورت زیر(کافیه table.DefaultView را به گزارش ارسال کنید)
[/CSHARP]
ممنون ولی جواب نداد. :گریه::ناراحت:
جالبه که با تابع خود تلریک میشه داده های فیلتر شده رو به چاپ ارسال کرد که اونم برا تلریکه.
اما نیازه اینارو بفرستم رو استیمو ریپورت. مطمئنم راهی هست چون وقتی خود تلریک میتونه همچین کاری بکنه پس شدنیه.
تابع عم اینه dgv1.PrintPreview()
1 ضمیمه
نقل قول: دسترسی به سطرهای فیلتر شده Telerik GridView
قسمت ارسال داده به گزارش را به صورت table.DefaultView.ToTable() اصلاح کنید
نمونه پروژه (در صورتی که خطا داد رفرنس های تلریک و یا استیمول را حذف و دوباره اضافه کنید)
نقل قول: دسترسی به سطرهای فیلتر شده Telerik GridView
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
قسمت ارسال داده به گزارش را به صورت table.DefaultView.ToTable() اصلاح کنید
نمونه پروژه (در صورتی که خطا داد رفرنس های تلریک و یا استیمول را حذف و دوباره اضافه کنید)
آقا واقعا ممنون . بدجور کارمو را انداختی دستت درد نکنه :تشویق:
اشتباه منم از اونجا ناشی میشد که اول دیتا گریدو پر میکردم بعد دیتا گرید رو میریختم تو دیتا تیبل. که اینکارو باید برعکس انجام میدادم. بازم از اینکه حوصله به خرج دادید ممنون و سپاسگزارم
نقل قول: دسترسی به سطرهای فیلتر شده Telerik GridView
فقط یک مشکل به وجود اومده که زیاد حاد نیست.
بعد از انتخاب شرط فیلتر و اعمال فیلتر مشکلی نیست. بار دوم که بخوام شرط فیلتر رو عوض کنم این خطا برام ظاهر میشه.
ضمیمه 145780
خب این تغییرات به نظرتون منجر به این خطا شده؟
نقل قول: دسترسی به سطرهای فیلتر شده Telerik GridView
چه کدی اجرا میکنید که به این خطا ختم میشه؟ دقیقا خط اول اون کد یک break point بزارید و با F11 تریس کنید ببینید چه خطی باعث بوجود اومدن خطا میشه. حتما ارجاعی دارید که null هست و دارید به اجزای اون دسترسی پیدا میکنید.
نقل قول: دسترسی به سطرهای فیلتر شده Telerik GridView
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
چه کدی اجرا میکنید که به این خطا ختم میشه؟ دقیقا خط اول اون کد یک break point بزارید و با F11 تریس کنید ببینید چه خطی باعث بوجود اومدن خطا میشه. حتما ارجاعی دارید که null هست و دارید به اجزای اون دسترسی پیدا میکنید.
کدی اجرا نمیکنم رو همون سطر فیلتر که یه کلمه رو مینویسم فیلتر انجام میشه. اما وقتی میخوام فیلتر رو عوض کنم و اون علامت قیف رو میزنم و شرطها نشون میدن یکیشون رو که انتخاب میکنم این خطا ظاهر میشه
:متفکر:
تریس هم کردم اون قسمت فیلتر رو تو فیلتر مشکلی نیست . فقط وقتی فیلتر تموم میشه میره تو اون program.cs و خطا نشون داده میشه
راحتترین مورد همین کدی که زحمت کشیدین و برام نوشتین رو تو سیستم خودتون اجرا کنید. بعد تو قسمت فیلتر a رو بنویسید بعد اون قیف رو بزنید و یه مورد از لیست رو انتخاب کنید. و خطا رو مشاهده کنید
نقل قول: دسترسی به سطرهای فیلتر شده Telerik GridView
نقل قول:
نوشته شده توسط
رامین مرادی
راحتترین مورد همین کدی که زحمت کشیدین و برام نوشتین رو تو سیستم خودتون اجرا کنید. بعد تو قسمت فیلتر a رو بنویسید بعد اون قیف رو بزنید و یه مورد از لیست رو انتخاب کنید. و خطا رو مشاهده کنید
امتحان کردم، با تغییر نوع فیلتر خطایی نداد. مطمئنی نمونه من هم خطا میده؟
نقل قول: دسترسی به سطرهای فیلتر شده Telerik GridView
نقل قول:
نوشته شده توسط
Mahmoud.Afrad
امتحان کردم، با تغییر نوع فیلتر خطایی نداد. مطمئنی نمونه من هم خطا میده؟
بله من میام رو سطری که کلمات رو وارد میکنم تا فیلتر انجام بشه یک کلمه رو تایپ میکنم درست انجام میشه . حالا بعد بدون اینکه به چیزی دست بزنم میرم رو اون علامت قیف کلیک میکنم ویکی از موارد رو انتخاب میکنم و خطا ایجاد میشه.
قبل از تغییر نوع فیلتر یک بار متنی وارد کنید سپس فیلتر رو تغییر بدید