2 ضمیمه
نمایش نتیجه جستجوی انجام شده روی dataset در datagridview
سلام وقت به خیر
دوستان من دارم یک برنامه ویندوزی تحت شبکه می نویسم که داخلش یک بخش جستجو قرار دادم که عملیات جستجو رو به ازای ورود هر حرف در تکست باکس انجام میده :
private void txtSearch_TextChanged(object sender, EventArgs e)
{
Searching...
}
در پروژه های گذشتم کوئری جستجو رو مستقیما روی دیتابیس اعمال می کردم و نتیجه رو در دیتاگریدویو نمایش میدادم
و چون برنامه تک کاربره بود، دفعات اتصال بالا به دیتابیس مشکلی ایجاد نمی کرد (به ازای ورود هر حرف توسط کاربر، یک بار اتصال به دیتابیس و اعمال کوئری جستجو)
اما خب همونطور که خودتون می دونید این تکنیک، از لحاظ فنی ارزش بسیار پایینی داره...
در پروژه ی جدیدم چون برنامه چند کاربره و تحت شبکه هست میخوام از روش اصولی تر که خواندن یک بار اطلاعات از دیتابیس و اعمال کوئری جستجو روی دیتاست هست استفاده کنم (دوستان اگر تکنیک بهتری مدنظرتون هست مطرح کنید لطفا)
اما مشکلم اینجاست که بعد از اعمال جستجو روی دیتاست و گرفتن نتیجه در یک آرایه ی رکورد، نمی تونم اون رو در دیتا گرید ویو نمایش بدم. از تکنیک های زیر استفاده کردم ولی به نتیجه نرسیدم
اول سعی کردم به صورت دستی یه جدول به دیتاست اضافه کنم و رکوردها رو به اون جدول اضافه کنم که نشد :
private void txtSearch_TextChanged(object sender, EventArgs e)
{
DataRow[] resultRows = ds.Tables["tblVisitant"].Select("Name Like '%S%' ");
DataTable dt = new DataTable("tblSearch");
dt = ds.Tables["tblVisitant"].Clone();
ds.Tables.Add(dt);
foreach (DataRow row in resultRows)
ds.Tables["tblSearch"].Rows.Add(row);
dgvMain.DataBindings.Clear();
dgvMain.DataBindings.Add("DataSource", ds, "tblSearch");
}
خطایی که در رابطه با کد بالا داد :
ضمیمه 139375
بعد سعی کردم نتیجه رو در یک جدول مستقل بریزم باز هم نشد :
private void txtSearch_TextChanged(object sender, EventArgs e)
{
DataRow[] resultRows = ds.Tables["tblVisitant"].Select("Name Like '%س%' ");
DataTable dt = new DataTable("tblSearch");
dt = ds.Tables["tblVisitant"].Clone();
foreach (DataRow row in resultRows)
dt.Rows.Add(row);
dgvMain.DataSource = dt;
}
خطایی که در رابطه با کد بالا داد :
ضمیمه 139376
دوستان عزیز ممنون میشم در این رابطه من رو راهنمایی کنید و ایراد روش های بالا رو هم توضیح بدید
خیلی ممنون
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
سلام دوست من
خب فیلتر رو با استفاده از کد زیر روی گرید انجاک بده:
for (int item = 0; item < dataGridView1.Rows.Count; item++)
{
if (!dataGridView1.Rows[item].Cells[1].Value.ToString().Contains(textBox1.Text))
dataGridView1.Rows[item].Visible = false;
else
dataGridView1.Rows[item].Visible = true;
}
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
نقل قول:
نوشته شده توسط
rezashaban
سلام دوست من
خب فیلتر رو با استفاده از کد زیر روی گرید انجاک بده:
for (int item = 0; item < dataGridView1.Rows.Count; item++)
{
if (!dataGridView1.Rows[item].Cells[1].Value.ToString().Contains(textBox1.Text))
dataGridView1.Rows[item].Visible = false;
else
dataGridView1.Rows[item].Visible = true;
}
ممنون دوست عزیز راه خوبیه ولی شرطی که اینجا گذاشتم یک مثال سادست، من میخوام از شرط های پیچیده تری استفاده کنم که واسه اعمال اونها نیاز به کار با خود دیتاست دارم
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
مثلا چه شرطهایی؟ خود گرید هم مثل دیتاستش هست تقریبا
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
نقل قول:
نوشته شده توسط
rezashaban
مثلا چه شرطهایی؟ خود گرید هم مثل دیتاستش هست تقریبا
شرط های بازه زمانی، شرط های محاسباتی و ...
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
نقل قول:
نوشته شده توسط
csharpcollegian
شرط های بازه زمانی، شرط های محاسباتی و ...
خب این موارد هم قابل اعمال هستش با همین روش
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
نقل قول:
نوشته شده توسط
rezashaban
خب این موارد هم قابل اعمال هستش با همین روش
بازم نمیشه چون قراره بعد از اعمال کوئری جستجو، تمام کنترل های دیگه ی فرم که به دیتاست بایند شدن تاثیر بپذیرن، بایستی حتما دیتاست باشه...
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
خب از این کد استفاده کن
dt.AsEnumerable().Where(میتونی از لامیدا استفاده کنی)
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
نقل قول:
نوشته شده توسط
rezashaban
خب از این کد استفاده کن
dt.AsEnumerable().Where(میتونی از لامیدا استفاده کنی)
آقا رضا مشکل من اعمال کوئری نیست، من نمی تونم بعد از اجرای کوئری نتیجه رو داخل یک دیتاست قرار بدم همین !
یه نگاه به کدهام بندازید....
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
خب از این کد استفاده کن
var dt = new DataTable()
{
Columns =
{
"name"
},
Rows =
{
"ali", "reza", "hasan"
}
};
var ds = new DataSet();
var dt1 = new DataTable();
dt1.TableName = "test";
ds.Tables.Clear();
ds.Tables[0].Rows.Add(dt.Select("select *...").ToList());
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
نقل قول:
نوشته شده توسط
rezashaban
خب از این کد استفاده کن
var dt = new DataTable()
{
Columns =
{
"name"
},
Rows =
{
"ali", "reza", "hasan"
}
};
var ds = new DataSet();
var dt1 = new DataTable();
dt1.TableName = "test";
ds.Tables.Clear();
ds.Tables[0].Rows.Add(dt.Select("select *...").ToList());
جواب نمیده این کد، ارور داره :
Cannot implicitly convert type 'System.Data.DataRow' to 'System.Data.DataRow[]
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
دوستان کسی نیست که بتونه این مشکل رو حل کنه ؟
خیلی ساده تر مشکلم رو مطرح کنم من فقط دنبال راهی هستم که بشه یک آرایه از جنس رکورد رو که نتیجه ی جستجوم از یک دیتاست داخلش قرار گرفته :
DataRow[] resultRows = ds.Tables["tblVisitant"].Select(.....);
رو وارد یک جدول جدید کنم و اون جدول جدید رو به دیتاستم اضافه کنم، همین !
ممنون میشم دوستان پاسخ بدن
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
نقل قول:
نوشته شده توسط
csharpcollegian
دوستان کسی نیست که بتونه این مشکل رو حل کنه ؟
خیلی ساده تر مشکلم رو مطرح کنم من فقط دنبال راهی هستم که بشه یک آرایه از جنس رکورد رو که نتیجه ی جستجوم از یک دیتاست داخلش قرار گرفته :
DataRow[] resultRows = ds.Tables["tblVisitant"].Select(.....);
رو وارد یک جدول جدید کنم و اون جدول جدید رو به دیتاستم اضافه کنم، همین !
ممنون میشم دوستان پاسخ بدن
می تونی از dataview استفاده کنی ....!!!! نه؟؟؟ نمی شه؟؟؟!!! :لبخند:
private void textBox1_TextChanged(object sender, EventArgs e)
{
DataView dv = new DataView(table);
dv.RowFilter = "Name like '%" + textBox1.Text + "%'";
dataGridView1.DataSource = dv;
}
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
نقل قول:
نوشته شده توسط
khokhan
می تونی از dataview استفاده کنی ....!!!! نه؟؟؟ نمی شه؟؟؟!!! :لبخند:
private void textBox1_TextChanged(object sender, EventArgs e)
{
DataView dv = new DataView(table);
dv.RowFilter = "Name like '%" + textBox1.Text + "%'";
dataGridView1.DataSource = dv;
}
چرا میشه !!! :لبخند::تشویق:
این روش جواب داد ممنونم ازتون
ولی خب اون مساله قبلی بدجوری فکرمو مشغول کرده و مطمئن هستم بعدا مجددا باهاش روبه رو میشم
چطور میشه یه آرایه از رکوردها رو به یه یک جدول جدید اضافه کرد ....!؟
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
نقل قول:
نوشته شده توسط
csharpcollegian
چرا میشه !!! :لبخند::تشویق:
این روش جواب داد ممنونم ازتون
ولی خب اون مساله قبلی بدجوری فکرمو مشغول کرده و مطمئن هستم بعدا مجددا باهاش روبه رو میشم
چطور میشه یه آرایه از رکوردها رو به یه یک جدول جدید اضافه کرد ....!؟
کل آرایه رو می ریزه توی یه حلقه البته قبلش بایستی تکلیف ستون مقصد رو مشخص می کنی ... یعنی اگه چنین ستونی وجود نداشت ، قبل از حلقه ایجاد می کنی و به تیبل اضافه می کنی
بعد درون حلقه دونه دونه آیتم ها رو می گیری و به اون ستونی که گفتم اضافه می کنی ............
باز اگه خیلی اصرار داری تا از روش خودت که در پست اول اشاره کردی استفاده کنی .... موقع افزودن ردیفها به جدول به جای استفاده از add ، از import استفاده کن تا بهانه اش از بین بره
یه چیزی مثل این :
DataTable dt1 = ds.Tables[0];
DataTable dt2 = new DataTable();
dt2 = dt1.Clone();
foreach(DataRow row in dt1.Rows){
if(row["Column1"] == 10){
// Import the Row into dt2 from dt1
dt2.ImportRow(row);
}
}
نقل قول: نمایش نتیجه جستجوی انجام شده روی دیتاست در دیتاگریدویو
نقل قول:
نوشته شده توسط
khokhan
کل آرایه رو می ریزه توی یه حلقه البته قبلش بایستی تکلیف ستون مقصد رو مشخص می کنی ... یعنی اگه چنین ستونی وجود نداشت ، قبل از حلقه ایجاد می کنی و به تیبل اضافه می کنی
بعد درون حلقه دونه دونه آیتم ها رو می گیری و به اون ستونی که گفتم اضافه می کنی ............
باز اگه خیلی اصرار داری تا از روش خودت که در پست اول اشاره کردی استفاده کنی .... موقع افزودن ردیفها به جدول به جای استفاده از add ، از import استفاده کن تا بهانه اش از بین بره
یه چیزی مثل این :
DataTable dt1 = ds.Tables[0];
DataTable dt2 = new DataTable();
dt2 = dt1.Clone();
foreach(DataRow row in dt1.Rows){
if(row["Column1"] == 10){
// Import the Row into dt2 from dt1
dt2.ImportRow(row);
}
}
آخ آخ اینم جواب داد...!!! :لبخند:
اینم کد صحیح با توجه به راهنمایی شما :
DataRow[] resultRow = ds.Tables["tblVisitant"].Select("Name Like '%" + txtSearch.Text + "%'");
DataTable dt = ds.Tables["tblVisitant"].Clone();
foreach (DataRow row in resultRow)
dt.ImportRow(row);
dgvMain.DataBindings.Clear();
dgvMain.DataSource = dt;
خیلی خیلی ممنون مشکلم کامل حل شد
موفق باشید