اجرای کد در زمان حرکت بین سطر های دیتا گرید
سلام
من کد زیر رو تو ایونت Row_enter دیتا گرید نوشتم که با حرکت کاربر بر روی سطر های دیتا گرید اطلاعات مربوط به اون سطر گرفته بشه و جواب مناسب برگردونده بشه ولی جواب رو درست بر نمی گردونه و کد با هربا حرکت بین سطرها دو بار برای اون سطر اجرا میشه برای این کار از کدوم ایونت استفاده کنم؟
private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.Focused)
{
if (dt.Rows[0][0].ToString() != "" && dataGridView1.CurrentRow.Index <dataGridView1.RowCount)
{
kolT.Text = sarobj.fetchKolTitle(dt.Rows[dataGridView1.CurrentRow.Index][0].ToString());
moinT.Text = sarobj.fetchMoinTitle(dt.Rows[dataGridView1.CurrentRow.Index][0].ToString(), dt.Rows[dataGridView1.CurrentRow.Index][1].ToString());
tafT.Text = sarobj.fetchTafTitle(dt.Rows[dataGridView1.CurrentRow.Index][0].ToString(), dt.Rows[dataGridView1.CurrentRow.Index][1].ToString(),
dt.Rows[dataGridView1.CurrentRow.Index][2].ToString());
if (dt.Rows[dataGridView1.CurrentRow.Index][3].ToString() != "")
{
jozT.Text = sarobj.fetchJozTitle(dt.Rows[dataGridView1.CurrentRow.Index][0].ToString(), dt.Rows[dataGridView1.CurrentRow.Index][1].ToString(),
dt.Rows[dataGridView1.CurrentRow.Index][2].ToString(), dt.Rows[dataGridView1.CurrentRow.Index][3].ToString());
}
else
jozT.Text = "";
}
}
}
dt
یه دیتا تیبل سراسریه که اطلاعات گرید در اون قرار داره
نقل قول: اجرای کد در زمان حرکت بین سطر های دیتا گرید
سلام
باید از رویداد یا همون اینونت
CellClick
استفاده کنی اول در پنجره
properties
خاصیت های زیر را برای گرید تنظیم کن
MultiSelect = false;
SelectionMode = FullRowSelect;
و بعد از رویداد زیر استفاده کن و با استفاده از
e.RowIndex
به سطر مورد نظر دسترسی داری
private void GridData_CellClick(object sender, DataGridViewCellEventArgs e)
{
e.RowIndex
}
نقل قول: اجرای کد در زمان حرکت بین سطر های دیتا گرید
سلام.
هدفم پاسخ دادن به این تاپیک نیست، فقط می خواستم بگم که کدتون رو حتما Refactor کنید:
private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
{
if (!dataGridView1.Focused)
return;
int currentRowIndex = dataGridView1.CurrentRow.Index;
if (!(dt.Rows[0][0].ToString() != string.Empty && currentRowIndex < dataGridView1.RowCount))
return;
DataRow row = dt.Rows[currentRowIndex];
string rowZeroValue = row[0].ToString();
string rowOneValue = row[1].ToString();
string rowTwoValue = row[2].ToString();
string rowThreeValue = row[3].ToString();
kolT.Text = sarobj.fetchKolTitle(rowZeroValue);
moinT.Text = sarobj.fetchMoinTitle(rowZeroValue, rowOneValue);
tafT.Text = sarobj.fetchTafTitle(rowZeroValue, rowOneValue, rowTwoValue);
if (rowThreeValue != string.Empty)
jozT.Text = sarobj.fetchJozTitle(rowZeroValue, rowOneValue, rowTwoValue, rowThreeValue);
else
jozT.Text = string.Empty;
}
من کد خودتون رو تغییر دادم و کاری به منطقش نداشتم، فقط هدفم نشون دادن این موضوع بود که هر کدی رو میشه با Refactoring خواناتر کرد:
- به نحوه Cache کردن Object هایی که قراره چندین بار استفاده بشه دقت کنید
- به Invert کردن if ها دقت کنید (Indenting کد بشدت کم میشه و کد قابل فهم تر میشه)
- به استفاده از Literal ها در برنامه دقت کنید (جای "" بنویسید string.Empty)
(طبیعتا اسامی rowZeroValue و ... رو باید به اسامی معناداری تغییر بدید. من چون نمیدوتسم دارید چه فیلدی رو آدرس میکنید، اسم متغیر رو اونطور انتخاب کردم).
موفق باشید.