نمایش نتایج 1 تا 3 از 3

نام تاپیک: اجرای کد در زمان حرکت بین سطر های دیتا گرید

  1. #1
    کاربر دائمی آواتار ozzy_mra
    تاریخ عضویت
    مهر 1388
    محل زندگی
    تهران
    پست
    544

    اجرای کد در زمان حرکت بین سطر های دیتا گرید

    سلام
    من کد زیر رو تو ایونت 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
    یه دیتا تیبل سراسریه که اطلاعات گرید در اون قرار داره

  2. #2
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1388
    پست
    36

    نقل قول: اجرای کد در زمان حرکت بین سطر های دیتا گرید

    سلام
    باید از رویداد یا همون اینونت
    CellClick
    استفاده کنی اول در پنجره
    properties
    خاصیت های زیر را برای گرید تنظیم کن
    MultiSelect = false;
    SelectionMode = FullRowSelect;
    و بعد از رویداد زیر استفاده کن و با استفاده از
    e.RowIndex
    به سطر مورد نظر دسترسی داری

    private void GridData_CellClick(object sender, DataGridViewCellEventArgs e)
    {
    e.RowIndex
    }

  3. #3

    نقل قول: اجرای کد در زمان حرکت بین سطر های دیتا گرید

    سلام.
    هدفم پاسخ دادن به این تاپیک نیست، فقط می خواستم بگم که کدتون رو حتما 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 و ... رو باید به اسامی معناداری تغییر بدید. من چون نمیدوتسم دارید چه فیلدی رو آدرس میکنید، اسم متغیر رو اونطور انتخاب کردم).

    موفق باشید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •