PDA

View Full Version : جستجو در datagrideview با استفاده از Linq و نمایش سطر در textbox



vesall
شنبه 17 اسفند 1392, 17:44 عصر
با سلام.
قصد دارم در یکی از سطون های datagrideview به دنبال یک مقدار بگردم و در صورت پیدا کردن اون، مقادیر اون سطر رو در textbox ها نمایش بدم.
قصد فیلتر کردن datagrideviewرو ندارم و حتما میخواسم متد جستجو باشه .


برای این موع جستجو و نمایش جستجو کردم اما به نتیجه ای نریسدم، اگر فکر میکنید این موضوع تکراری هست حذف کنید تاپیک رو.:افسرده:
با تشکر

khokhan
شنبه 17 اسفند 1392, 19:21 عصر
با سلام.
قصد دارم در یکی از سطون های datagrideview به دنبال یک مقدار بگردم و در صورت پیدا کردن اون، مقادیر اون سطر رو در textbox ها نمایش بدم.
قصد فیلتر کردن datagrideviewرو ندارم و حتما میخواسم متد جستجو باشه .


برای این موع جستجو و نمایش جستجو کردم اما به نتیجه ای نریسدم، اگر فکر میکنید این موضوع تکراری هست حذف کنید تاپیک رو.:افسرده:
با تشکر
ابتدا اندیس ردیف مورد نظر رو بدست می آری بعد مقدار تکست باکسها رو با توجه به اون اندیس از گرید می گیری


private void textBox1_TextChanged(object sender, EventArgs e)
{
try
{
String searchValue = textBox1.Text.ToString();
int rowIndex = -1;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[0].Value.ToString().Equals(searchValue))
{
rowIndex = row.Index;
break;

}
}
//dataGridView1.ClearSelection();
//dataGridView1.Rows[rowIndex].Selected = true;
textBox2.Text = dataGridView1.Rows[rowIndex].Cells[0].Value.ToString();
textBox3.Text = dataGridView1.Rows[rowIndex].Cells[1].Value.ToString();
textBox4.Text = dataGridView1.Rows[rowIndex].Cells[2].Value.ToString();
}
catch { }
}

khokhan
شنبه 17 اسفند 1392, 19:34 عصر
واگه خیلی اصرار داری تا با دستورات linq این کار انجام بشه:لبخند: اینطوری بنویس :


private void textBox5_TextChanged(object sender, EventArgs e)
{
int rowIndex = -1;
String searchValue = textBox5.Text.ToString();
DataGridViewRow row = dataGridView1.Rows
.Cast<DataGridViewRow>()
.Where(r => r.Cells[0].Value.ToString().Equals(searchValue))
.First();

rowIndex = row.Index;
textBox2.Text = dataGridView1.Rows[rowIndex].Cells[0].Value.ToString();
textBox3.Text = dataGridView1.Rows[rowIndex].Cells[1].Value.ToString();
textBox4.Text = dataGridView1.Rows[rowIndex].Cells[2].Value.ToString();
}

vesall
شنبه 17 اسفند 1392, 20:43 عصر
با سلام و تشکر بابت پاسختون ولی یه مشکلی هست.
تو دیتابیس من نوع nchar(10) رو انتخاب کردم و اون هم فضای خالی رو با space پر کرده و وقتی جستجو می کنم به خاطر اون spaec ها پیدا نمیکنه.

در مورد این میتونید راهنماییم کنید ؟

vesall
شنبه 17 اسفند 1392, 20:51 عصر
زمانی که از لینک هم استفاده کردم این ارور رو داد ( این روزا زیاد به این ارور بر میخورم. دلیلش چیه !؟ )

http://www.pic.tooptarinha.com/images/61u3rrnxafsi5jy9lh.jpg

khokhan
شنبه 17 اسفند 1392, 22:17 عصر
با سلام و تشکر بابت پاسختون ولی یه مشکلی هست.
تو دیتابیس من نوع nchar(10) رو انتخاب کردم و اون هم فضای خالی رو با space پر کرده و وقتی جستجو می کنم به خاطر اون spaec ها پیدا نمیکنه.

در مورد این میتونید راهنماییم کنید ؟
می تونین یه متد بنویسین تا فضاهای خالی توی دیتا گرید با یه متن پیش فرض پر بشه


dataGridView1.Columns[1].DefaultCellStyle.NullValue = "خالی";

vesall
یک شنبه 18 اسفند 1392, 01:18 صبح
اینطوری اگر کسی اسمش mohamad reza باشه فاصله وسطشو خراب می کنه! راه بهتری نیست ؟

مهرداد صفا
یک شنبه 18 اسفند 1392, 16:38 عصر
با سلام و تشکر بابت پاسختون ولی یه مشکلی هست.
تو دیتابیس من نوع nchar(10) رو انتخاب کردم و اون هم فضای خالی رو با space پر کرده و وقتی جستجو می کنم به خاطر اون spaec ها پیدا نمیکنه.

در مورد این میتونید راهنماییم کنید ؟

سلام.
از متود Trim برای حذف فضاهای خالی استفاده کنید. به این صورت:


int RowIndex=Datagrid.Rows.Cast<DataGridViewRow>().Where(r=>r.Cells[0].Value.Tostring().Trim()==MyValue).Select(r=>r.RowIndex).First();

vesall
دوشنبه 19 اسفند 1392, 12:38 عصر
ضمن تشکر فراوان از دوستان عزیز که جواب سوالم رو دادن.
کدی که با راهنمایی دوستان استفاده کردم رو میگذارم اینجا شاید به درد کسی بخوره:

textBox1.Text = cmbcdata.Text; textBox1.Select(0,4);
ssherkat = textBox1.SelectedText;
int RowIndex = dataGridView1.Rows.Cast<DataGridViewRow>().Where(r => r.Cells[0].Value.ToString().Trim() == ssherkat).Select(r => r.Cells[0].RowIndex).First();
txtkodsherkat.Text = dataGridView1.Rows[RowIndex].Cells[0].Value.ToString();
txtfnameferestande.Text = dataGridView1.Rows[RowIndex].Cells[1].Value.ToString();




راستی، ببخشید اگر اسم گذاریهام اینقدر بده :خجالت:

Mahmoud.Afrad
جمعه 23 اسفند 1392, 10:29 صبح
به جای nchar ، از نوع داده Navrchar استفاده کنید.