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

نام تاپیک: به دست اوردن id یک ردیف در datagridview

  1. #1

    به دست اوردن id یک ردیف در datagridview

    سلام

    یه دیتا گرید ویو دارم که یه ستونش رو به صورت چک باکس گذاشتم
    برنامه ام به این صورته که کاربر یه تعداد ردیف ها رو انتخاب میکنه یعنی چک باکس ردیفای موردنظرشو تیک میزنه و بعد روی دکمه ذخیره کلیک میکنه که تغییرات تو دیتابیس ذخیره بشن

    مشکلم اینجاس که چه جور مشخص کنم که چه ردیفی انخاب شده
    نمیدونم که از selectedrowچه جور استفاده میشه
    لطفا راهنماییم کنید


    وقتم زیاد نیست و عجله دارم

  2. #2

    نقل قول: به دست اوردن idیک ردیف در گرید ویو

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

    string id = datagidview1[0,datagridview.currentrow.index].value.tostring;



    با همون روشی بالا ببین خانه شماره 0 مال آی دی من تو دیتا گرید ویو است شما با همین روش میتونی هر فیلد را بدست بیاری بعد آبدیت کنی

  3. #3

    نقل قول: به دست اوردن idیک ردیف در گرید ویو

    سلام من هم تقریبا همین مشکل دوستمون text@123 رو دارم
    من یه دیتاگرید ویو دارم که 4 تا ستون داره و ستون چهارمش یه چک باکسه... حالا من میخوام در هر ردیفی که تیک خورده حذف کنم... با کد وقتی یه ردیفو انتخاب میکنم عمل حذف انجام میشه ولی وقتی بیش از یک چک باکس تیک میخورن موقع حذف خطا میگیره... اینم بگم من ستونهای دیتاگریدمو از پروپرتی دیتاگرید(ویزارد) تعریف کردم و delcell نام ستونیه که چک باکسه. دوستان لطفا راهنمایی بفرمایند چگونه میتونم هر تعداد ردیفی که چک باکس اونا فعال بود رو حذف کنم ؟؟

    private void delete_btn_Click(object sender, EventArgs e)
    {

    int t = dataGridView1.RowCount;
    for (int i =0; i < t; i++)
    {

    if (Convert.ToBoolean(dataGridView1.Rows[i].Cells["delcell"].Value) ==true)

    {

    SqlCommand cmd = new SqlCommand("delete from A_archive where persenel_no=@code and radif=@rad", myconstr.con);
    cmd.Parameters.AddWithValue("@code", code_p.Text);
    cmd.Parameters.AddWithValue("@rad",dataGridView1.R ows[i].Cells["radif"].Value);
    myconstr.con.Open();
    cmd.ExecuteNonQuery();
    myconstr.con.Close();
    MessageBox.Show("حذف شد");


    }


    }

    }




  4. #4
    کاربر تازه وارد
    تاریخ عضویت
    آبان 1391
    محل زندگی
    West Azarbaijan, Urmia
    پست
    71

    نقل قول: به دست اوردن id یک ردیف در datagridview

    نقل قول نوشته شده توسط text@123 مشاهده تاپیک
    سلام

    یه دیتا گرید ویو دارم که یه ستونش رو به صورت چک باکس گذاشتم
    برنامه ام به این صورته که کاربر یه تعداد ردیف ها رو انتخاب میکنه یعنی چک باکس ردیفای موردنظرشو تیک میزنه و بعد روی دکمه ذخیره کلیک میکنه که تغییرات تو دیتابیس ذخیره بشن

    مشکلم اینجاس که چه جور مشخص کنم که چه ردیفی انخاب شده
    نمیدونم که از selectedrowچه جور استفاده میشه
    لطفا راهنماییم کنید


    وقتم زیاد نیست و عجله دارم

    سلام

    خاصیت SelectedRow سطرهای Select شده از DataGridView رو برمیگردونه.(نه سطرهایی که CheckBox داره و تیک خوردن).

    شما به دو روش میتونید به خواسته تون برسید.

    1. یا باید ستون CheckBox رو از DataGridView حذف کنید. و از خاصیت SelectedRow برای بدست آوردن سطرهای انتخا شده استفاده کنید.

    مثال:

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
    if (row.Selected)
    {
    //کارهایی که میخواهید در صورت انتخاب بودن سطر مورد نظر انجام بدید رو اینجا بنویسید
    }
    }



    2. یا اینکه ستون CheckBox باشه و شما سطرهایی که تیک خوردن رو بدست بیارید.

    مثال:

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
    if (Convert.ToBoolean(row.Cells[نام یا ایندکس ستون دارای چک باکس].Value))
    {
    //کارهایی که میخواهید در صورت چکدار بودن سطر مورد نظر انجام بدید رو اینجا بنویسید
    }
    }


    موفق باشید

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    آبان 1391
    محل زندگی
    West Azarbaijan, Urmia
    پست
    71

    نقل قول: به دست اوردن idیک ردیف در گرید ویو

    نقل قول نوشته شده توسط aria2006 مشاهده تاپیک
    سلام من هم تقریبا همین مشکل دوستمون text@123 رو دارم
    من یه دیتاگرید ویو دارم که 4 تا ستون داره و ستون چهارمش یه چک باکسه... حالا من میخوام در هر ردیفی که تیک خورده حذف کنم... با کد وقتی یه ردیفو انتخاب میکنم عمل حذف انجام میشه ولی وقتی بیش از یک چک باکس تیک میخورن موقع حذف خطا میگیره... اینم بگم من ستونهای دیتاگریدمو از پروپرتی دیتاگرید(ویزارد) تعریف کردم و delcell نام ستونیه که چک باکسه. دوستان لطفا راهنمایی بفرمایند چگونه میتونم هر تعداد ردیفی که چک باکس اونا فعال بود رو حذف کنم ؟؟

    private void delete_btn_Click(object sender, EventArgs e)
    {

    int t = dataGridView1.RowCount;
    for (int i =0; i < t; i++)
    {

    if (Convert.ToBoolean(dataGridView1.Rows[i].Cells["delcell"].Value) ==true)

    {

    SqlCommand cmd = new SqlCommand("delete from A_archive where persenel_no=@code and radif=@rad", myconstr.con);
    cmd.Parameters.AddWithValue("@code", code_p.Text);
    cmd.Parameters.AddWithValue("@rad",dataGridView1.R ows[i].Cells["radif"].Value);
    myconstr.con.Open();
    cmd.ExecuteNonQuery();
    myconstr.con.Close();
    MessageBox.Show("حذف شد");


    }


    }

    }



    سلام

    شما بجای حلقه for از foreach استفاده کنید مشکلتون حل میشه.(با اجازتون من کدهاتون رو کمی ویراش کردم.)

    این تابع رو به کدهای کلاس فرمتون اضافه کند.(این تابغ تعداد سطرهای تیک خورده رو برمیگردونه) البته اختیاریه.

    int GetCheckedCount(DataGridView gridView, int columnIndex)
    {
    return (gridView.Rows.Cast<DataGridViewRow>()
    .Where(rows => Convert.ToBoolean(rows.Cells[columnIndex].Value) == true)).Count();
    }


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

    private void delete_btn_Click(object sender, EventArgs e)
    {
    int i = 0;
    SqlConnection myConnection = new SqlConnection("کانکشن استرینگ");


    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
    if (Convert.ToBoolean(row.Cells[نام یا ایندکس ستون دارای چک باکس].Value))
    {
    string pCode = code_p.Text;//اینجا باید کد پرسنلی دوباره بازخوانی شود

    try
    {
    SqlCommand cmd = myConnection.CreateCommand();
    cmd.CommandType=CommandType.Text;
    cmd.CommandText = "DELETE FROM A_archive WHERE persenel_no = @code and radif = @rad";
    cmd.Parameters.AddWithValue("@code", pCode);
    cmd.Parameters.AddWithValue("@rad", row.Cells["radif"].Value);


    if(myConnection.State == ConnectionState.Closed)
    myConnection.Open();


    cmd.ExecuteNonQuery();


    i++;
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    finally
    {
    myConnection.Close();
    }

    }
    }


    int checkedrowscount = GetCheckedCount(dataGridView1,ایندکس ستون دارای چک باکس);
    MessageBox.Show("تعداد " + i.ToString() + " سطر از " + checkedrowscount.ToString() + " سطر انتخا شده حذف شد");

    }


    هر جایی مشکل داشت بگید تا بررسی کنم.

    موفق باشید.
    آخرین ویرایش به وسیله rg_BlackRose : سه شنبه 21 مهر 1394 در 01:21 صبح دلیل: اشتباه تایپی

  6. #6

    نقل قول: به دست اوردن idیک ردیف در گرید ویو

    جناب rg_BlackRose ممنون از توجهتون
    راستش من قبلا سراغ foreach رفته بودم ... منتها چون من دیتاگرید ویو و فرمهامو از کامپوننتهای telerik استفاده کردم نمیدونم چرا از foreach واسه این قسمت ایراد میگیره.... خطاش در عکس زیر هست.
    foreach error.JPG

  7. #7

    نقل قول: به دست اوردن id یک ردیف در datagridview

    سپاس از راهنمایی ارزشمندتون

    موفق باشید

  8. #8
    کاربر تازه وارد
    تاریخ عضویت
    آبان 1391
    محل زندگی
    West Azarbaijan, Urmia
    پست
    71

    نقل قول: به دست اوردن idیک ردیف در گرید ویو

    نقل قول نوشته شده توسط aria2006 مشاهده تاپیک
    جناب rg_BlackRose ممنون از توجهتون
    راستش من قبلا سراغ foreach رفته بودم ... منتها چون من دیتاگرید ویو و فرمهامو از کامپوننتهای telerik استفاده کردم نمیدونم چرا از foreach واسه این قسمت ایراد میگیره.... خطاش در عکس زیر هست.
    foreach error.JPG
    با سلام مجدد

    من تا حالا از کامپوننت تلریک استفاده نکردم. ولی این پیغام بیانگر این هست که، دیتاگرید تلریک از Telerik.WinControls.UI.riViewRowInfo به جای DataGridViewRow استفاده میکنه. پس قائدتا با تغییر و جایگزین این دو (و احتمالا تغییرات جزئی در کدها) بتونید از foreach استفاده کنید.

    و اما دلیل اینکه گفتم از foreach استفاده کنید.

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

    موفق باشد.

  9. #9

    نقل قول: به دست اوردن idیک ردیف در گرید ویو

    نقل قول نوشته شده توسط rg_BlackRose مشاهده تاپیک
    با سلام مجدد

    من تا حالا از کامپوننت تلریک استفاده نکردم. ولی این پیغام بیانگر این هست که، دیتاگرید تلریک از Telerik.WinControls.UI.riViewRowInfo به جای DataGridViewRow استفاده میکنه. پس قائدتا با تغییر و جایگزین این دو (و احتمالا تغییرات جزئی در کدها) بتونید از foreach استفاده کنید.

    و اما دلیل اینکه گفتم از foreach استفاده کنید.

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

    موفق باشد.
    سلام
    من خطای خود حلقه foreach رو برطرف کردم ولی جای دیگه خطا میگرفت کلا foreach با دیتاگرید تلریک سر ناسازگاری داشت...
    اما بدون foreach هم میشه و با یه حلقه for ساده این کارو بصورت دقیق واونجور که خودم میخواستم انجام شد... این که شما گفتید اگه foreach نباشه و سطر جاری (خط اول) را حذف رو حذف کند سط دو جایگزین سطر یک میشه و ترتیب حذف سطرها بهم میخوره و.... این در صورتیه که شما درون حلقه for بیای دیتاگرید رو رفرش کنی اونوقت حق با شماست... ولی من بعد از اینکه حلقه کارشو تموم کرد و خارج شد در پایان کار دیتاگریدمو رفرش میکنم... کد زیر بدون مشکل کارشو انجام میده و هر تعداد سطر با هر ترتیبی از دیتاگرید رو که چک باکس اون تیک داشته باشه رو بدون خطا و باگ حذف خواهد کرد...



    private void delete_btn_Click(object sender, EventArgs e)
    {

    int t = dataGridView1.RowCount;

    int tedadhazf=0;

    for (int i =0; i <= t-1; i++)
    {

    if (Convert.ToBoolean(dataGridView1.Rows[i].Cells["delcell"].Value)==true)

    {

    SqlCommand cmd = new SqlCommand("delete from A_archive where persenel_no=@code and radif=@rad", myconstr.con);
    cmd.Parameters.AddWithValue("@code", code_p.Text);
    cmd.Parameters.AddWithValue("@rad",dataGridView1.R ows[i].Cells["radif"].Value);
    myconstr.con.Open();
    cmd.ExecuteNonQuery();
    myconstr.con.Close();
    tedadhazf++;// برای شمارش تعداد سطرهای تیک خورده یا حذف شده
    }
    }

    if (tedadhazf > 0)
    {
    code_o.Text = string.Empty;
    name_o.Text = string.Empty;
    date_s.Text = string.Empty;
    adrspic.Text = string.Empty;
    sanadpic.Image = null;
    radif_no.Value = 1;
    x = true;
    archive1_Load(null, null);// با این فراخوانی دیتاگرید رفرش میشه
    MessageBox.Show(" تعداد " + tedadhazf.ToString() + " سطر حذف شد");
    }
    else
    {
    MessageBox.Show("ابتدا مربع سطر مربوطه را تیک بزنید");
    }


    }




تاپیک های مشابه

  1. به دست اوردن تعداد یک ردیف
    نوشته شده توسط mamadco در بخش PHP
    پاسخ: 2
    آخرین پست: شنبه 06 تیر 1394, 20:47 عصر
  2. به دست اوردن طول و عرض تصاویر اپلود شده
    نوشته شده توسط fereshte22 در بخش ASP.NET Web Forms
    پاسخ: 11
    آخرین پست: یک شنبه 14 مرداد 1386, 20:30 عصر
  3. به دست اوردن IP کاربران
    نوشته شده توسط golnaz99 در بخش ASP.NET Web Forms
    پاسخ: 11
    آخرین پست: سه شنبه 09 مرداد 1386, 09:40 صبح
  4. پاسخ: 3
    آخرین پست: پنج شنبه 27 اردیبهشت 1386, 08:40 صبح
  5. به دست اوردن سطر اخر
    نوشته شده توسط farhadyoosefi در بخش SQL Server
    پاسخ: 11
    آخرین پست: پنج شنبه 10 اسفند 1385, 14:00 عصر

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

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