PDA

View Full Version : selectیک فیلد از داخل datagridview



raminsalemi
یک شنبه 06 مرداد 1387, 09:50 صبح
سلام: من در برنامم قصد دارم یک فیلد رو از داخل datagridview انتخاب کنم ودر داخل یک textBoxنمایش بدم به این صورت که من دو تا textBox دارم که یکی کد و دیگری نام رو دریافت میکنه و این عمل ممکنه بارها انجام بشه پس قصدمن اینه وقتی کاربر کد رو وارد کرد به طور خودکار نام از داخل datagridview بر اساس کد select شده ودر textBoxنام نمایش داده بشه
تا سرعت عمل کاربر بالا بره لطفا کد وتوضیح این کار رو که خیلی حیاتیه برام بذارید . با تشکر

ASKaffash
یک شنبه 06 مرداد 1387, 10:12 صبح
سلام
دوست عزیز این سئوال کلی است . ولی شما میتوانید در KeyPress آن TextBox مقدار را دریافت کرده و سریعا با یک حلقه DataGridView را پیمایش کنید و مقدار ستون مورد نظر را با مقدار TextBox مقایسه کرده و در صورت پیدا کردن مقدار TextBox دوم را با ستون موردنظر دیگر از گرید پرکنید.

raminsalemi
یک شنبه 06 مرداد 1387, 19:23 عصر
سلام دوست عزیز اگر امکان داره کد و توضیح این کار رو برام بذارید.
ممنونم

unique1984
یک شنبه 06 مرداد 1387, 19:30 عصر
سلام
من یه نمونه آماده کردم.
ظاهرا می خواین با خود datagridview کار کنین.
من در روبداد click باتن، با استفاده از table اینکارو انجام دادم و در رویداد textbox_keypress این کار رو با استفاده از دیتا گیرید انجام دادم.
امیدوارم بتونه مشکلتونو حل کنه.

raminsalemi
سه شنبه 08 مرداد 1387, 00:32 صبح
سلام از لطفتون ممنونم ولی فایلی که برام گذاشتید بطور کامل دانلود نمی شه و فقط صفحه ورود اعضا دانلود میشه اگر امکان داره کد و توضیح این کار رو برام بذارید .
مچکرم

unique1984
سه شنبه 08 مرداد 1387, 12:29 عصر
این نمونه یه فرم بیشتر نداشت و در دانلود هم مشکلی نداره . شما مطمئنین که همینو دانلود کردین؟
اما کد و توضیح اون:

private void txtcode_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Return)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (dataGridView1[0, i].Value.ToString() == txtcode.Text)
textname.Text = dataGridView1[1, i].Value.ToString();
}
}
}

خب همونطور که مشخصه در رویداد keypress تکست باکس txtcodeبررسی می شه که اگه کلید اینتر زده شد،کل گرید رو جستجو کنه و اگه ستون 0 گرید که در واقع کد ، اونجا نمایش داده شده، با مقدار txtcode معادل بود ، ستون 1 گرید که حاوی نام هستش رو در تکست باکس txtnameمی ریزه.خب این کد برای کار با datagridview هستش.
حالا اگه بخواین با table کار کنین (اون table ی که به گریدتون متصله)می تونین این کدو بنویسین.

SqlConnection con = new SqlConnection("server=(local);database=sample;uid=;pwd=;trusted_c onnection=yes");
string s = "select firstname from test where code='" +txtcode.Text + "'";
SqlDataAdapter da = new SqlDataAdapter(s, con);
DataSet ds = new DataSet();
da.Fill(ds, "t1");
txtname.Text = ds.Tables["t1"].Rows[0][0].ToString();
البته من فرض کردم اسم دیتا بیسم sample و اسم جدولم test هستش.(از نوع دیتا بیس sql server)

ASKaffash
سه شنبه 08 مرداد 1387, 13:31 عصر
سلام
اینهم کدش :


private void button2_Click(object sender, EventArgs e)
{
this.dataGridView1.MultiSelect = false;
for (int i = 0; i < this.dataGridView1.RowCount; i++)
if (this.textBox1.Text.Trim() == this.dataGridView1[1, i].Value.ToString().Trim())
{
this.dataGridView1[1, i].Selected = true;
break;
}
}

raminsalemi
شنبه 12 مرداد 1387, 16:33 عصر
uniqueعزيز از برنامه بسيار عالي که برام گذاشتي ممنونم اما وقتي عينا به روش شما کدها رو در برنامم پياده ميکنم وقتي code رو در textboxاول وارد ميکنم و اينتر ميزنم اين خطا رو ميده آيا رفرنس يا چيزي هست که من بايد به برنامه اضافه کنم؟
خطا: object reference not set to an instance of an object
لطفا من رو راهنمايي کنيد با تشکر.

unique1984
شنبه 12 مرداد 1387, 19:40 عصر
فکر کنم اگه خصوصیت AllowUserToAddRows مربوط به گرید رو False کنید مشکلتون حل بشه.
من با این شرایط اینکارو انجام دادم.

Leon_pro
شنبه 12 مرداد 1387, 19:53 عصر
این جوری که من متوجه شدم از سوالت فکر میکنم میخوای کاربر روی هر ردیف تو گرید که حرکت میکنه مقادیر اون ردیف تو textbox نمایش داده بشه.

برای این کار میتونی textbox ها رو bind کنی.

this.txt_CustomerUserID.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.tblCustomerBindingSource, "CustomerUserID", true));

اگر هم گریدت به database کتصل نیست ، میتونی از خاصیت CurrentRow ، گرید استفاده کنی.


DataGrid1.CurrentRow.Cells[1].Value.ToString();

یا اینکه از رخداد RowEnter استفاده کنی .

private void DataGrd_RowEnter(object sender, DataGridViewCellEventArgs e)
{

textbox1.Text = DataGrd["Column1",e.RowIndex].Value.ToString();


}

در انتها اگر گریدت به دیتابیس متصل نیست من استفاده از Event RowEnter رو پیش نهاد میکنم .

raminsalemi
یک شنبه 13 مرداد 1387, 08:53 صبح
باسلام: از لطفت ممنونم (unique)مشکل برنامم حل شد. با تشکر