PDA

View Full Version : سوال: انتخاب سطرهای دیتا گرید ویو



Beginner67
جمعه 02 مرداد 1394, 11:28 صبح
سلام.

یک دیتاگیرید در فرم دارم و یک دکمه.

میخوام با انتخاب سطر و کلیک روی دکمه در صفحه دیگه ای فیلدها داخل تکست باکس قرار بگیرن.
این کار رو میتونم انجام بدم اما فقط برای سطر اول.
کد این هست:

string d1 = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
f.textBox2.Text = d1;


اما برای سطرهای دیگه باید یک متغیر تعریف کنم و به جای 0،اون متغیر مثلا i رو بذارم.
متغیر i رو چجوری باید مقدار بدم؟

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

_4rm4n_
جمعه 02 مرداد 1394, 11:46 صبح
سلام دوست من.
یعنی کاربر که یک سطر رو انتخاب میکنه میخواید که اونو بفهمید ؟

datagridview1.currentrow.cells[0].value

موفق باشید

davidrobert
جمعه 02 مرداد 1394, 12:36 عصر
بفرمائید برای ریختن اطلاعات سلول مورد نظر کادر متن.
private void dgv1_Click(object sender, EventArgs e)
{
try
{
//TxtCodeBank.Enabled = true;
TxtCodeBank.Text = dgv1.SelectedRows[0].Cells["ClmCodeBank"].Value.ToString();
TxtNameBank.Text = dgv1.SelectedRows[0].Cells["ClmNameBank"].Value.ToString();
}
catch
{
}
}

rg_BlackRose
جمعه 02 مرداد 1394, 13:03 عصر
سلام

سوالتون کمی نامفهوم هست، اگر بیشتر توضیح بدید که برای چه منظوری میخواهید این کار رو انجام بدید بهتر راهنمایی میشید.

اما

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

if(dataGridView1.SelectedRows.Count > 0)
{
textBox1.Text = dataGridView1.SelectedRows[ایندکس سطر انتخاب شده].Cells[نام یا ایندکس ستون مورد نظر].Value.ToString();
}




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

if(dataGridView1.Rows.Count>=1 && dataGridView1.SelectedRows.Count == 1)
{
var value;

for (int i = 0; i <= dataGridView1.SelectedRows.Count; i++)
{
value = dataGridView1.SelectedRows[i].Cells[نام یا ایندکس ستون مورد نظر].Value.ToString();
}
}


یا:

if(dataGridView1.Rows.Count>=1 && dataGridView1.SelectedRows.Count == 1)
{
var value;

foreach(DataGridViewRow dgvr in dataGridView1.Rows)
{
value = dgvr.Cells[نام یا ایندکس سطون مورد نطر].Value.ToString();
}
}


موفق باشید

Beginner67
جمعه 02 مرداد 1394, 15:57 عصر
سلام.
ممنون از همگی.
ببینید من یک صفحه به نام لیست دانش آموز دارم.که یک دیتا گرید داره و مشخصات دانش آموز رو نشون میده.
برای ویرایش یکی از رکوردها،یکی از سطرها رو انتخاب میکنم و روی دکمه ویرایش کلیک میکنم و به صفحه ویرایش منتقل میشم.کد دکمه ویرایش این بود:


edit_student f = new edit_student();


string d1 = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
f.textBox2.Text = d1;


string d2 = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
f.textBox3.Text = d2;


string d3 = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();
f.textBox4.Text = d3;


string d4 = dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
f.textBox5.Text = d4;


string d5 = dataGridView1.SelectedRows[0].Cells[4].Value.ToString();
f.textBox6.Text = d5;



در صفحه ویرایش چند تکست باکس وجود داره.تکست باکس ها با این کد پر میشن،اما فقط سطر اول گرید میاد تو این تکست باکس ها.
اگر مثلا سطر 5 رو از گرید انتخاب کنم،اون اطلاعات نمیان تو تکست باکس.بلکه اطلاعات سطر اول تو تکست باکس ها میشینن. چون برای سطر 0 گذاشتم.

جواب دوستمون ک گفتن به جای selectrow از CurrentRow استفاده کنیم،درسته جواب میده.
فقط آیا وقتی ویرایش کنم اطلاعات سطر اول از گرید رو آپدیت میکنه یا همون سطری ک من انتخاب کردم؟

Beginner67
جمعه 02 مرداد 1394, 16:09 عصر
من خودم این راه حل رو رفتم اما فقط اطلاعات رو منتقل میکنه به صفحه ویرایش ولی وقتی ویرایش میکنم اطلاعات رو میذاره توی رکورد اول گرید،نه سطر مورد نظر من.


صفحه ای ک گرید داره این کد :

public void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
int i;
i = e.RowIndex;
q = i;


}


q :

public static int q;


و داخل دکمه ویرایش این کد :


public void pictureBox1_Click(object sender, EventArgs e)
{
edit_student f = new edit_student();


string d = dataGridView1.Rows[q].Cells[0].Value.ToString();
f.textBox6.Text = d;

string d1 = dataGridView1.Rows[q].Cells[1].Value.ToString();
f.textBox2.Text = d1;


string d3 = dataGridView1.Rows[q].Cells[2].Value.ToString();
f.textBox5.Text = d3;
}



چطوری در صفحه ویرایش اطلاعات ویرایش شده رو ذخیره کنم ک در رکورد خودش بشینه،نه رکورد اول.

Beginner67
جمعه 02 مرداد 1394, 16:43 عصر
برای آپدیت قبلا از روش ویزاردی میرفتم.
چون سطری ک من میخواستم آپدیت نمیشد به صورت دستی نوشتم اما در cmd.ExecuteNonQuery(); خطا میده.


SqlConnection cnc = new SqlConnection(ConfigurationManager.ConnectionStrin gs["c"].ConnectionString);
string sqlcommand = "update student set (stname=@stname,stfamil=@stfamil,stfather=@stfathe r where stid=@stid)";
SqlCommand cmd = new SqlCommand(sqlcommand, cnc);
cmd.Parameters.AddWithValue("@stname", textBox6.Text);
cmd.Parameters.AddWithValue("@stfamil", textBox2.Text);
cmd.Parameters.AddWithValue("@stfather", textBox5.Text);
cnc.Open();
cmd.ExecuteNonQuery();
cnc.Close();


علتش چیه؟
لطفا کمک کنید من اینو درست کنم،از صب نشستم سر همین ویرایش.:(

ژیار رحیمی
شنبه 03 مرداد 1394, 02:32 صبح
دوست عزیز روش کارتون جالب نیست که تمام اطلاعات یه سطر از گرید که مربوط به یک دانش آموز هست رو پاس کنی به فرم دیگه جهت ویرایش.شما بهتر فقط و فقط کلید دانش آموز (کد دانش آموز ) به فرم ارسال و از فرم دریافتی مجدد رکورد دانش آموز رو از دیتابیس خونده و نمایش دهید

rg_BlackRose
شنبه 03 مرداد 1394, 03:15 صبح
با سلام دوباره

متد SelectedRows از DataGridView با متد Row اون متفاوت هست.

SelectedRows لیستی از سطرهای انتخاب شده رو برمیگردونه، اگر یک سطر رو انتخاب کردین همون سطر و اگر بیش از یک سطر انتخاب کردین اونهارو به صورت آرایه برمیگردونه.

شما برای حل مشکل

این قسمت:

public void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
int i;
i = e.RowIndex;
q = i;




}


و این قسمت:


public static int q;


رو حذف بکنید.

و این قسمت رو :

public void pictureBox1_Click(object sender, EventArgs e)
{
edit_student f = new edit_student();




string d = dataGridView1.Rows[q].Cells[0].Value.ToString();
f.textBox6.Text = d;

string d1 = dataGridView1.Rows[q].Cells[1].Value.ToString();
f.textBox2.Text = d1;




string d3 = dataGridView1.Rows[q].Cells[2].Value.ToString();
f.textBox5.Text = d3;
}


به این شکل تغییر بدین:
public void pictureBox1_Click(object sender, EventArgs e){
edit_student f = new edit_student();


f.textBox6.Text = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
f.textBox2.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
f.textBox5.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();

//اینجا یک چیزی رو فراموش کردید، برای ویرایش رکورد مورد نظر باید شناسه دانش آموز زو هم به فرم ویرایش ارسال کنید.(برای انجام اینکار توضیحات پایین رو ببینید)
f.stid = dataGridView1.SelectedRows[0].Cells[3].Value

f.ShowDialog();
}


توضیحات:
1. در فرم جدول، یک ستون به انتهای ستونهای DataGridView اضافه کنید.(دقت کنید که ستون جدید بعد از ستونهای نام، فامیل و اسم پدر قرار بگیره). و خاصیت Visible ستون جدید رو غیر فعال کنید.تا نمایش داده نشود.
2. در فرم ویرایش یک متغیر با نام stid و از نوع var و قابلیت دسترسی Public تعریف کنید.(public var stid;)

این کدها رو :

SqlConnection cnc = new SqlConnection(ConfigurationManager.ConnectionStrin gs["c"].ConnectionString);
string sqlcommand = "update student set (stname=@stname,stfamil=@stfamil,stfather=@stfathe r where stid=@stid)";
SqlCommand cmd = new SqlCommand(sqlcommand, cnc);
cmd.Parameters.AddWithValue("@stname", textBox6.Text);
cmd.Parameters.AddWithValue("@stfamil", textBox2.Text);
cmd.Parameters.AddWithValue("@stfather", textBox5.Text);
cnc.Open();
cmd.ExecuteNonQuery();
cnc.Close();


به شکل زیر تغییر بدید:

try
{
SqlConnection cnc = new SqlConnection(ConfigurationManager.ConnectionStrin gs["c"].ConnectionString);
SqlCommand cmd = new SqlCommand("UPDATE student SET stname=@stname,stfamil=@stfamil,stfather=@stfather WHERE stid=@stid", cnc);
cmd.Parameters.AddWithValue("@stname", textBox6.Text);
cmd.Parameters.AddWithValue("@stfamil", textBox2.Text);
cmd.Parameters.AddWithValue("@stfather", textBox5.Text);
cmd.Parameters.AddWithValue("@stid", stid);

if(cnc.State != ConnectionState.Open)
cnc.Open();

cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
cnc.Close();
}


توصیه های تجربی برنامه نویس:
1. قبل از ذخیره دانش آموز جدید یا ویرایش اطلاعات اون، داده های مهم (نام، فامیلی و ...) رو توی برنامه چک کنید که خالی نیاشن(در این صورت ممکنه با خطا مواجه بشید).
2. از تابع try catch برای خطایابی سریع کدهای نوشته شده استفاده کنید(نمونه اش در سایت موجود است).
3. از تعریف متغرهای بی مورد خودداری کنید.
4 برای رسیدن به یک هدف در کد نویسی ممکنه راههای بیشترو راحت تری رو داشته باشید. ولی قواعد و قوانین کد نویسی رو نقض نکنید.


موفق باشید

Beginner67
شنبه 03 مرداد 1394, 14:46 عصر
دوست عزیز rg_BlackRose (http://barnamenevis.org/member.php?270069-rg_BlackRose)

یک سپاس برای کمکتون کمه.
واقعا ممنونم برای وقتی که گذاشتید.
درست شد.