PDA

View Full Version : مبتدی: جستجو براساس Textbox درفرم2 و نمایش در گرید ویو در فرم1



zohre gorji2
یک شنبه 29 آبان 1390, 23:07 عصر
سلام
تو فرم 2 دوتا textbox دارم بدون هیچ دکمه ای . یکی سرچ براساس نام خانوادگیه یکی دیگه سرچ براساس شماره پرسنلی
میخوام وقتی داخل textbox حروف رو مینویسم تو دیتاگرید ویو تو فرم اولم نمایش داده بشه
گرید ویومم بایند نیست
درضمن خیلیم سرچ کردم جوابمو پیدا نکردم

zarrinnegar
دوشنبه 30 آبان 1390, 01:37 صبح
باید چند تا کار رو انجام بدی
اول اینکه فرم دومت رو توی فرم اول بصورت global تعریف کن

public Form1()
{
InitializeComponent();
}
Form3 fr3 = newForm3();


دوم اینکه یک button داری که فرم دوم رو باز میکنه توش یک textbox هست این کد ها رو بنویس


privatevoid button1_Click(object sender, EventArgs e)
{
fr3.textBox1.TextChanged += newEventHandler(this.DGW_Click);
fr3.ShowDialog();
}


بعدش یک پروسیجر میسازی که وقتی روی textbox فرم دومت تغییری انجام شد این برنامه کار کنه


publicvoid DGW_Click(object sender, EventArgs e)
{
dataGridView1.DataSource= fr3.data1();
}


تا اینجا توی فرم اول بود

حالا توی فرم دوم یه textbox میزاری و modify اون رو روی Public قرار میدی

بعدش یک پروسیجر مینویسی با این کد


publicIQueryable data1()
{
var lq = newDataClasses1DataContext();
var dt = lq.Personels.Where(c => c.personel_family.Contains(textBox1.Text));
return dt;
}

البته من چون با linq کار میکنم اینطوری نوشتم میتونی کد ها رو با ado عوض کنی
در ضمن جدول من personel هستش

بعدش توی textbox1_textchanged همون text box اینو مینویسی


privatevoid textBox1_TextChanged(object sender, EventArgs e)
{
data1();
}


البته توی load فرم اولت هم که دیتاگرید رو خودت پر میکنی

تمام
تست کن

zohre gorji2
دوشنبه 30 آبان 1390, 15:58 عصر
ممنون از راهنمایی هاتون
اما متاسفانه من متوجه نشدم پروسیجر data1 چیکار میکنه
اگه امکانش هست پروسیجر data1 رو با ado برام بنویسید ممنون میشم

Pouyan2010
دوشنبه 30 آبان 1390, 16:48 عصر
دوست عزیز
من یه کمبوباکس روی فرم دارم که هم دست کاربر را برای سرچ های مختلف باز میزاره و هم دست خودم را:
Textbox4 همون مورد سرچمه:
ببین این کد کمکت می منه، هرجاش رو نفهمیدی بگو تا کمکت کنم:

try
{
if (comboBox2.Text == "")
{
errorProvider1.Clear();
errorProvider1.SetError(comboBox2, "لطفا مقداری برای جستجو وارد کنید");
return;
}
else
{
errorProvider1.Dispose();
}

switch(comboBox2.Text.ToString() ){
case "کد":
LinqInsertSmsDataContext con = new LinqInsertSmsDataContext(Linq._ServerConncection);
var qoury = from p in con.T_SMS_Azas
where SqlMethods.Like(p.Code , "%" + textBox4.Text + "%")
select p;
dataGridViewX1.DataSource = qoury;
break;
case "نام":

LinqInsertSmsDataContext conn = new LinqInsertSmsDataContext(Linq._ServerConncection);
var qouryy = from p in conn.T_SMS_Azas
where SqlMethods.Like(p.Name, "%" + textBox4.Text + "%")
select p;
dataGridViewX1.DataSource = qouryy;

break;
case "شماره تلفن همراه":
LinqInsertSmsDataContext connn = new LinqInsertSmsDataContext(Linq._ServerConncection);
var qouryyy = from p in connn.T_SMS_Azas
where SqlMethods.Like(p.Tel_M, "%" + textBox4.Text + "%")
select p;
dataGridViewX1.DataSource = qouryyy;
break;
}

}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
البته این کد را در داخل روی داد تکست چنج بنویس. موفق باشی

Amir Oveisi
دوشنبه 30 آبان 1390, 17:31 عصر
حالا توی فرم دوم یه textbox میزاری و modify اون رو روی Public قرار میدی
چرا باید public باشه؟

zohre gorji2
دوشنبه 30 آبان 1390, 18:52 عصر
من به جوابم رسیدم دستتون درد نکنه
txtbox فرم دومم فکر کنم به این دلیل باید public باشه که از فرم یک باتعریف متغیر سراسری بشه بهش دسترسی داشت

Amir Oveisi
دوشنبه 30 آبان 1390, 18:57 عصر
من به جوابم رسیدم دستتون درد نکنه
txtbox فرم دومم فکر کنم به این دلیل باید public باشه که از فرم یک باتعریف متغیر سراسری بشه بهش دسترسی داشت

خوب این کار کاملا اشتباه و مغایر با اصول برنامه نویسی شی گراست.
در مورد روش صحیح این کار ده ها بار در سایت بحث شده. جستجو کنید و از روش های درست برای حل مسایل استفاده کنید.

mmd2009
دوشنبه 30 آبان 1390, 19:03 عصر
دوست عزیز
من یه کمبوباکس روی فرم دارم که هم دست کاربر را برای سرچ های مختلف باز میزاره و هم دست خودم را:
Textbox4 همون مورد سرچمه:
ببین این کد کمکت می منه، هرجاش رو نفهمیدی بگو تا کمکت کنم:

try
{
if (comboBox2.Text == "")
{
errorProvider1.Clear();
errorProvider1.SetError(comboBox2, "لطفا مقداری برای جستجو وارد کنید");
return;
}
else
{
errorProvider1.Dispose();
}

switch(comboBox2.Text.ToString() ){
case "کد":
LinqInsertSmsDataContext con = new LinqInsertSmsDataContext(Linq._ServerConncection);
var qoury = from p in con.T_SMS_Azas
where SqlMethods.Like(p.Code , "%" + textBox4.Text + "%")
select p;
dataGridViewX1.DataSource = qoury;
break;
case "نام":

LinqInsertSmsDataContext conn = new LinqInsertSmsDataContext(Linq._ServerConncection);
var qouryy = from p in conn.T_SMS_Azas
where SqlMethods.Like(p.Name, "%" + textBox4.Text + "%")
select p;
dataGridViewX1.DataSource = qouryy;

break;
case "شماره تلفن همراه":
LinqInsertSmsDataContext connn = new LinqInsertSmsDataContext(Linq._ServerConncection);
var qouryyy = from p in connn.T_SMS_Azas
where SqlMethods.Like(p.Tel_M, "%" + textBox4.Text + "%")
select p;
dataGridViewX1.DataSource = qouryyy;
break;
}

}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
البته این کد را در داخل روی داد تکست چنج بنویس. موفق باشی

با سلام

دوست عزیز این کد کلا همش مشکل داره. ایراداش رو با یک نگاه هم میشه فهمید. پس linq Dynamic رو برای چی گذاشتن ؟ یا چرا کدهاتون اینقدر تکراری هستند ؟

موفق باشید

Pouyan2010
دوشنبه 30 آبان 1390, 21:13 عصر
با سلام

دوست عزیز این کد کلا همش مشکل داره. ایراداش رو با یک نگاه هم میشه فهمید. پس linq Dynamic رو برای چی گذاشتن ؟ یا چرا کدهاتون اینقدر تکراری هستند ؟

موفق باشید
شما درست می گین اما این فقط یه تیکه کد بود که از برنامم کپیش کردم که دوستمون فقط مفهوم را بگیره، مگرنه در هر Case من کئوری ها را هنوز برای یه جای دیگه فرستادم که کاره دیگه ای نمی شد انجام بدم، این قسمت کد را حذف کردم.
در هر صورت اگه مشکلی هست بزارید به حساب بی تجربگی من، من فقط خواستم کمک کنم.
موفق باشید، ممنون از راهنماییتون

zarrinnegar
سه شنبه 01 آذر 1390, 08:28 صبح
لطفا از دوستان با تجربه ای که نظراتشون رو درباره این تاپیک دادن میخوام که نظرشون رو نسبت به جواب اول این تاپیک که دادم بگن ببینم چیه
البته از نظر کار درست کار میکننه از نظر فنی و کد های اضافه و روش و ... میخوام بدونم

میخوام اگه موردی هست رفع کنم

Amir Oveisi
سه شنبه 01 آذر 1390, 12:34 عصر
براي دسترسي به textbox موجود در فرم ديگه نيازي به public كردن اون نيست. ميتونيد از روش زير كه بارها در سايت توضيح داده شده استفاده كنيد:
http://barnamenevis.org/showthread.php?280174-%D8%AC%D9%88%D8%A7%D8%A8-%D9%86%DA%AF%D8%B1%D9%81%D8%AA%D9%85-%D9%84%D8%B7%D9%81%D8%A7-%D8%AD%D8%B0%D9%81-%D9%86%DA%A9%D9%86%DB%8C%D8%AF-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-%D8%A7%D8%B4%DB%8C%D8%A7-%D9%81%D8%B1%D9%85-%D8%AF%DB%8C%DA%AF%D8%B1&highlight=%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%D9%8A