PDA

View Full Version : جستجو براساس فیلد Id(کیلد اصلی)



Mansoor92
جمعه 29 آذر 1392, 09:39 صبح
سلام

من میخوام توی رویداد TextChenged تکسباکسم کد مربوط به یک دیتاگرید رو بنویسیم که میخوام فقط براساس یک فیلد عددی جستجو بشه که بصورت زیر نوشتم اما وقتی اجرا میکنم با خطا روبرو میشم


private void textBox1_TextChanged(object sender, EventArgs e)
{

var q = db.tbl_Driver.Where(c => c.Id.ToString().Contains(textBox1.Text));
dataGridView1.DataSource = q.ToList();
}


و خطایی که هنگام اجرا میگیره اینه

http://uploadkon.ir/uploads/Untitled_809.png



ممنون میشم راهنمایی کنید...

Mansoor92
جمعه 29 آذر 1392, 10:29 صبح
با سلام.
به جای Where از Select استفاده کنید.

سلام

ممنونم که پاسخ دادید

ولی بازم همون خطا رو میگیره....

plus
جمعه 29 آذر 1392, 10:58 صبح
شما نباید از متد ToString استفاده کنی. بجای این کار مقدار وارد شده در TextBox رو اول به عدد تعریف کن و بعد با خود Id (بدون تبدیل اون به رشته) مقایسه کن.دو تا عدد رو نباید به صورت رشته ای مقایسه کرد!

private void textBox1_TextChanged(object sender, EventArgs e)
{
int id = int.Parse(textBox1.Text); // You may need to check for invalid input by TryParse
var q = db.tbl_Driver.Where(c => c.Id == id);
dataGridView1.DataSource = q.ToList();
}

یا دقیق تر

private void textBox1_TextChanged(object sender, EventArgs e)
{
int id;
if (int.TryParse(textBox1.Text, out id))
{
var q = db.tbl_Driver.Where(c => c.Id == id);
dataGridView1.DataSource = q.ToList();
}
}

Mansoor92
جمعه 29 آذر 1392, 11:05 صبح
شما نباید از متد ToString استفاده کنی. بجای این کار مقدار وارد شده در TextBox رو اول به عدد تعریف کن و بعد با خود Id (بدون تبدیل اون به رشته) مقایسه کن.دو تا عدد رو نباید به صورت رشته ای مقایسه کرد!

private void textBox1_TextChanged(object sender, EventArgs e)
{
int id = int.Parse(textBox1.Text); // You may need to check for invalid input by TryParse
var q = db.tbl_Driver.Where(c => c.Id == id);
dataGridView1.DataSource = q.ToList();
}

یا دقیق تر

private void textBox1_TextChanged(object sender, EventArgs e)
{
int id;
if (int.TryParse(textBox1.Text, out id))
{
var q = db.tbl_Driver.Where(c => c.Id == id);
dataGridView1.DataSource = q.ToList();
}
}



ممنونم که پاسخ دادید

با این روش هم جواب نمیده یعنی وقتی من توی تکسباکس عدد مثلا 1 که یک آیدی هست رو وارد میکنم دیتاگرید ویوو بصورت کامل خالی میشه و هیچ رکوردی رو نشون نمیده

و همچنین میخوام حتما از contains استفاده کنم...

plus
جمعه 29 آذر 1392, 11:15 صبح
اگه میخواین از Contains استفاده کنید بجای ToString از SqlFunctions.StringConvert استفاده کنید.

private void textBox1_TextChanged(object sender, EventArgs e)
{

var q = db.tbl_Driver.Where(c => SqlFunctions.StringConvert((double)c.Id).Contains( textBox1.Text));
dataGridView1.DataSource = q.ToList();
}

Mansoor92
جمعه 29 آذر 1392, 11:39 صبح
اگه میخواین از Contains استفاده کنید بجای ToString از SqlFunctions.StringConvert استفاده کنید.

private void textBox1_TextChanged(object sender, EventArgs e)
{

var q = db.tbl_Driver.Where(c => SqlFunctions.StringConvert((double)c.Id).Contains( textBox1.Text));
dataGridView1.DataSource = q.ToList();
}


واقعا ازتون ممنونم
ولی با این روش هم دقیقا مانند قبلی میشه

وقتی یک عدد رو سرچ میکنم دیتاگریدویوو خالی میشه و هیچ اطلاعاتی رو نشون نمیده...

plus
جمعه 29 آذر 1392, 11:53 صبح
باید با مقادیر مختلف Debug کنید تا بفهمید مشکل چیه.البته نمیدونم استفاده از Select بجای Where هم که دوستمون گفتن شاید بی تاثیر نباشه.یا شرط رو حذف کنید ببینید اصلا چیزی انتخاب میشه...به هر حال نظر میاد کد درست باشه.