PDA

View Full Version : سوال: بروز خطا در جستجو اطلاعات بیش از یکبار



raminnnnn
چهارشنبه 14 مرداد 1394, 10:52 صبح
سلام یه تکست باکس با دکمه جستجو و یه دیتا گرید ویو روی فُرمم دارم ، وقتی تکست باکسُ با آیدی یا اسم پُر می کنم اطلاعات از بانک خونده میشه و روی دیتا گرید ویو نشون داده میشه
ولی وقتی یه اطلاعات غلط وارد می کنم دفعه بعد که میخام جستجو کنم اررو میده و وارد Catch میشه . ینی فقد یکبار با زدن دکمه جستجو می تونم جستجو کنم و دفعه های بعد ارور میده ! چطوری می تونم این مشکلُ حل کنم و دیتا گریدویوم اطلاعاتش پاک شه و دفعه بعد که جستجو رو زدم مجددن Refresh شه ؟
ممنون میشم راهنمایی کنید .

davidrobert
چهارشنبه 14 مرداد 1394, 11:39 صبح
شما بیاد تو جستجو تون بگید اگه عمل جستجو انجام شد و اطلاعات نمایش داد که هیچی اگه اطلاعات جستجو نشود و کادر متن جستجو خالی شد کل اطلاعات نشان بده در دیتاگرید ویو یعنی بر گرد بهئ حالت اول اگه نمخیوهی اطلاعات کل جدوال نمایش بدی بگو کادر متن در هنگام خالی شدن دیتاگرید ویو خالی بشه.

raminnnnn
چهارشنبه 14 مرداد 1394, 13:01 عصر
میشه یکم بیشتر توضیح بدین ؟ اینُ نوشتم نمی دونم کجا باید بگم بهش که اطلاعات پیدا نشد برگرد به حالت قبلیت برای دفعه بعد که جستجو رو فشار دادم :)



try
{
if (comboBox1.SelectedItem == null)
MessageBox.Show("لطفا نوع جستجو را انتخاب کنید ! ", "خطا", MessageBoxButtons.OK,
MessageBoxIcon.Error,MessageBoxDefaultButton.Butto n1,MessageBoxOptions.RtlReading);
da.Connect();
DataTable dt = new DataTable();
string sql;
switch (comboBox1.Text)
{
case "کد":
sql = "select * from Vachiles where V_Code={0}";
sql = string.Format(sql, txtSearch.Text);
dt = da.Select(sql);
if (dt.Rows.Count > 0)
{
dataGridView1.DataSource = dt;

}
else if (dt.Rows.Count == 0)
{
MessageBox.Show("چنین رکوردی وجود ندارد لطفا دوباره سعی نمائید", "پیام خطا", MessageBoxButtons.OK, MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
da.DisConnect();
frmVachiles_Load(null, null);
return;
}

break;

case "نام":
sql = "select * from Vachiles where V_Name=N'{0}'";
sql = string.Format(sql, txtSearch.Text);
dt = da.Select(sql);
if (dt.Rows.Count > 0)
{
dataGridView1.DataSource = dt;

}
else if (dt.Rows.Count == 0)
{
frmVachiles_Load(null, null);
MessageBox.Show("چنین رکوردی وجود ندارد لطفا دوباره سعی نمائید", "پیام خطا",
MessageBoxButtons.OK, MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);

da.DisConnect();
// frmVachiles_Load(null, null);
return;
}

break;

}

}

catch
{


MessageBox.Show("خطای پیش بینی نشده", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Stop,
MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
dataGridView1.Columns.Clear();
// frmVachiles_Load(null, null);
}

rg_BlackRose
چهارشنبه 14 مرداد 1394, 13:26 عصر
سلام

اگه برنامه قرار نیست تحت شبکه اجرا بشه(در این صورت هم روشهایی وجود داره)، نیازی هم نیست که در هر بار جستجو اطلاعات رو از دیتابیس بازخوانی کنید.

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

پست 18 این تاپیک رو ببینید
http://barnamenevis.org/showthread.php?501756-بهینه-ترین-روش-خواندن-از-دیتابیس-به-محض-وارد-کردن-یک-حرف-از-کیبرد-جهت-جستجو

موفق باشید

davidrobert
چهارشنبه 14 مرداد 1394, 15:42 عصر
بفرمایید این کد جستجو من.
if (TxtSearch.Text != "")
{
var q = from source in db.Tbl_Bank.OrderByDescending(d => d.B_ID)
select source;
double code = Int64.Parse(TxtSearch.Text);
if (LblCodeBank.Text == "کد بانک :")
{
q = q.Where(f => f.B_CB_Code_Bank == code);
}
dgv1.DataSource = q.ToList();
}
else if (TxtSearch.Text == "")
{

//نمایش اطلاعات دیتاگرید ویو یا همون دستور نمایش رو دوباره قرار بدید.
یعنی اطلاعات کل دیتابیس نشان بده اگه کادر متن خالی بود یعنی دیتاگرید برگرد به حالت اول.
ShowInfo();
}