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

نام تاپیک: وارد کردن سه صفر در سلول datagridview

  1. #1
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

    وارد کردن سه صفر در سلول datagridview

    سلام خدمت دوستان عزیز
    یه دیتا گرید دارم یه سلول داره که عدد میگیره حالا کاربر ازم خواسته یه کلید رو (مثلا کلید+) رو به عنوان کلید سه صفر تعریف کنم مثل کلید ماشین حساب که با زدن این کلید سه صفر به انتهای عددی که وارد کرده اضافه بشه
    خودم این به ذهنم رسید که جواب نداد

    private void DGSanad_KeyUp(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == Keys.Add)
    {
    if (DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BED"].Index || DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BES"].Index)
    {
    DGSanad.CurrentCell.Value = (Convert.ToInt64(DGSanad.CurrentCell.EditedFormatt edValue.ToString()) * 1000).ToString();

    }
    }
    }

    ممنون میشم کمک کنید لطف میکنید

  2. #2
    مدیر بخش آواتار محمد رضا فاتحی
    تاریخ عضویت
    مهر 1387
    محل زندگی
    کهنسالترین موجود زنده در شهر منه
    پست
    1,181

    نقل قول: وارد کردن سه صفر در سلول datagridview

    سلام
    یکبار بدون شرط انجام بدین یا تریس کنید ببنید داخل شرط وارد میشه یا نه
    به جای EditedFormattedValue هم از value استفاده کنید
    یک نقطه بیشتر فرق بین رحیم و رجیم نیست...از نقطه ای بترس که شیطانیت می کند

    ________________________

  3. #3
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

    نقل قول: وارد کردن سه صفر در سلول datagridview

    نقل قول نوشته شده توسط محمد رضا فاتحی مشاهده تاپیک
    سلام
    یکبار بدون شرط انجام بدین یا تریس کنید ببنید داخل شرط وارد میشه یا نه
    به جای EditedFormattedValue هم از value استفاده کنید
    سلام مشکل شرط نیست
    از value هم که استفاده میکنم مقدار null
    ببینید مشکل اینجاست که وقتی سلول در حال ادیت شدنه یعنی شما داری مقدار بهش میدی هنوز سلول value نگرفته که پس مقدار null میده
    من وارد سلول شد و دارم دیتا اینتری میکنم مثلا 22 رو زدم حالا میخوام به جای اینکه سه بار صفر رو بزنم کلید + رو بزنم خودش سه صفر به آخر عبارت اضافه کنه
    به مقدار با Value نمیشه دسترسی پیدا کرد

  4. #4
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

    نقل قول: وارد کردن سه صفر در سلول datagridview

    دوستان عزیز کسی نیست راهنمایی کنه
    فکر نکنم اینقد پیچیده باشه
    دیدین یه کار ساده به خنسی میخوره
    تو هزار تا برنامه دیدم این مورد رو
    یه لطفی کنید
    میدونم همه سرشون شلوغه و درگیر و این مشکل منم پیش پا افتاده ولی بد کارمو لنگ کرده

  5. #5
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

    نقل قول: وارد کردن سه صفر در سلول datagridview

    دوستان گلم چنتا عکس با توضیح میزارم شاید بتونید کمک کنید
    Untitled11.jpg
    اینجا کار بر عدد دو رو تو فیلد بده کار وارد میکنه
    پایین فرم سیستم جمع value ستون بده کار رو نشوون میده که همون 2 هست
    Untitled112.jpg
    اینجا کاربر کلید add (+) رو میزنه مقدار فیلد دیتا گرید تغییری نمیکنه ولی تو پایین فرم جمع مقدار ستون رو که بر اساس value سلول هست درست نشون میده
    Untitled3.jpg
    حالا کاربر از ستون خارج میشه مقدار سلول همون 2 مقدار جمع ستون بده کارم میشه 2 یعنی value تغییر میکنه
    Untitled4.jpg
    حالا اینجا کار بر مجدد بر میگرده به سلول بدهکار سلول سلکت میشه(رو ادیت نمیره)
    Untitled5.jpg
    حالا کاربر (+) رو میزنه باز مثل مرحله قبل مقدار سلول تغییر پیدا نمیکنه ولی جمع مقدار ستون تو پایین فرم درست میشه
    اما این بار که کاربر از ستون خارج میشه مقدار سلول تغییر پیدا میکنه و هم مقدار سلول درسته هم مقدار جمع ستون اون پایین
    (امکان لود عکس پنجم نبود تو پست بعدی میزارم)

  6. #6
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

    نقل قول: وارد کردن سه صفر در سلول datagridview

    ضمیمه 150332
    نتیجه کلی اینکه کد بالا که تو پست اول گذاشتم خروجیش میشه اینکه
    وقتی کاربر در حالت دیتا انتری هست ت سلول و کلید + رو میزنه مقدار نمایش داده شده تو اون لحظه تو سلول تغییر نمیکنه اما مقدار value سلول تغییر میکنه اما بعد از خروج از سلول دوباره مقدار value برابر میشه با EditedFormattedValue
    یعنی غلط در غلط
    اما وقتی کاربر رو حالت سلکت تو سلول هست و + رو میزنه باز مقدار value تغییر میکنه اما EditedFormattedValue نه ولی وقتی از سلول خارج میشه اینبار مقدار EditedFormattedValue که برابر با value میشه!
    حال شما پرتغال فروشو پیدا کنید

    نکته هم اینکه اگه دوستانی که پیشنهاد میکنن کدر به حالت زیر تغییر بدم
     private void DGSanad_KeyUp(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == Keys.Add)
    {
    if (DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BED"].Index || DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BES"].Index)
    {
    DGSanad.CurrentCell.EditedFormattedValue = (Convert.ToInt64(DGSanad.CurrentCell.EditedFormatt edValue.ToString()) * 1000).ToString();
    }
    }
    }

    بگم که EditedFormattedValue فقط خواندنی و نمیشه اینجوری بهش مقدار داد

  7. #7

    نقل قول: وارد کردن سه صفر در سلول datagridview

    الان یکم با ایونت ها کار کردم تونستم به این چیزی که شما مدنظرته برسم، یه تست کن ببین درسته؟
    اول اینکه کد keyup که خودت نوشتی رو کلا بردار و حذف کن، بعدش برای دیتاگریدت باید ایونت EditingControlShowing رو پیاده کنی به اینصورت:
    private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
    var txtBox = e.Control as TextBox;
    if (txtBox != null)
    {
    // حذف هندلرهایی که قبلا دنبال شده اند برای اجتناب از دنبال کردن هندلرهای اضافی
    txtBox.KeyDown -= new KeyEventHandler(DgvTextBox_KeyDown);
    txtBox.TextChanged -= new EventHandler(DgvTextBox_TextChanged);

    // دنبال کردن ایونت هندلر ها
    txtBox.KeyDown += new KeyEventHandler(DgvTextBox_KeyDown);
    txtBox.TextChanged += new EventHandler(DgvTextBox_TextChanged);
    }
    }

    حالا باید ایونت های DgvTextBox_KeyDown و DgvTextBox_TextChanged رو به این شکل تعریف کنی:

    void DgvTextBox_KeyDown(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == Keys.Add)
    {
    if (dataGridView1.CurrentCell.ColumnIndex == dataGridView1.Columns["BED"].Index || dataGridView1.CurrentCell.ColumnIndex == dataGridView1.Columns["BES"].Index)
    {
    dataGridView1.CurrentCell.Value = (Convert.ToInt64(dataGridView1.CurrentCell.EditedF ormattedValue.ToString()) * 1000).ToString();
    }
    }
    }

    void DgvTextBox_TextChanged(object sender, EventArgs e)
    {
    if (dataGridView1.CurrentCell.Value != null)
    {
    var txtBox = (TextBox)sender;
    if (txtBox.Focused)
    {
    if (dataGridView1.CurrentCell.EditedFormattedValue.To String().Contains('+'))
    txtBox.Text = dataGridView1.CurrentCell.Value.ToString();
    else
    txtBox.Text = dataGridView1.CurrentCell.EditedFormattedValue.ToS tring();

    txtBox.SelectionStart = txtBox.Text.Length;
    }
    }
    }


  8. #8
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

    نقل قول: وارد کردن سه صفر در سلول datagridview

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    الان یکم با ایونت ها کار کردم تونستم به این چیزی که شما مدنظرته برسم، یه تست کن ببین درسته؟
    اول اینکه کد keyup که خودت نوشتی رو کلا بردار و حذف کن، بعدش برای دیتاگریدت باید ایونت EditingControlShowing رو پیاده کنی به اینصورت:
    private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
    var txtBox = e.Control as TextBox;
    if (txtBox != null)
    {
    // حذف هندلرهایی که قبلا دنبال شده اند برای اجتناب از دنبال کردن هندلرهای اضافی
    txtBox.KeyDown -= new KeyEventHandler(DgvTextBox_KeyDown);
    txtBox.TextChanged -= new EventHandler(DgvTextBox_TextChanged);

    // دنبال کردن ایونت هندلر ها
    txtBox.KeyDown += new KeyEventHandler(DgvTextBox_KeyDown);
    txtBox.TextChanged += new EventHandler(DgvTextBox_TextChanged);
    }
    }

    حالا باید ایونت های DgvTextBox_KeyDown و DgvTextBox_TextChanged رو به این شکل تعریف کنی:

    void DgvTextBox_KeyDown(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == Keys.Add)
    {
    if (dataGridView1.CurrentCell.ColumnIndex == dataGridView1.Columns["BED"].Index || dataGridView1.CurrentCell.ColumnIndex == dataGridView1.Columns["BES"].Index)
    {
    dataGridView1.CurrentCell.Value = (Convert.ToInt64(dataGridView1.CurrentCell.EditedF ormattedValue.ToString()) * 1000).ToString();
    }
    }
    }

    void DgvTextBox_TextChanged(object sender, EventArgs e)
    {
    if (dataGridView1.CurrentCell.Value != null)
    {
    var txtBox = (TextBox)sender;
    if (txtBox.Focused)
    {
    if (dataGridView1.CurrentCell.EditedFormattedValue.To String().Contains('+'))
    txtBox.Text = dataGridView1.CurrentCell.Value.ToString();
    else
    txtBox.Text = dataGridView1.CurrentCell.EditedFormattedValue.ToS tring();

    txtBox.SelectionStart = txtBox.Text.Length;
    }
    }
    }

    سلام ممنون از وقتی که گذاشتی کدی که نوشتی جواب نداد وعملا همون کاری رو کرد که کد خودم انجام میداد
    اما اما اگه میشد هزار تا لایک برات میفرستادم

    چون تو کدای که فرستادی دو خطش ذهنمو مث یه نور افکن روشن کرد کدوم کد؟؟؟
    یکی این
    // حذف هندلرهایی که قبلا دنبال شده اند برای اجتناب از دنبال کردن هندلرهای اضافی
    txtBox.KeyDown -= new KeyEventHandler(DgvTextBox_KeyDown);
    txtBox.TextChanged -= new EventHandler(DgvTextBox_TextChanged);

    و یکی

    txtBox.SelectionStart = txtBox.Text.Length;


    اومدم چیکار کردم

    اول
      private void DGSanad_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
    // سلول ها فقط عدد بگیرند
    text = e.Control as TextBox;
    if (DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BED"].Index || DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BES"].Index)
    {
    text.KeyPress -= new KeyPressEventHandler(DGSanad_KeyPress);

    text.KeyPress += new KeyPressEventHandler(DGSanad_KeyPress);
    }



    }
    اون قسمت اول کدت اینجا به درد خورد که باعث میشد متدDGSanad_KeyPress بیخودی چند بار فراخوانی نشه
    بعد نوبت کد

    private void DGSanad_KeyPress(object sender, KeyPressEventArgs e)
    {
    if (DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BED"].Index || DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BES"].Index )
    {
    //-----------------------------اگر غیر از عدد وارد شد--------------
    if (!char.IsDigit(e.KeyChar))
    {
    if (e.KeyChar != 8 && e.KeyChar != 46)
    e.Handled = true;
    else
    {
    if (e.KeyChar != 8)
    e.Handled = true;
    }
    //---------------------------اضافه کردن سه صفر با +---------------------------
    if (e.KeyChar == 43)
    {
    if (DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BED"].Index || DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BES"].Index)
    {
    DGSanad.CurrentCell = DGSanad.CurrentRow.Cells[DGSanad.CurrentCell.ColumnIndex - 1];
    DGSanad.CurrentRow.Cells[DGSanad.CurrentCell.ColumnIndex + 1].Value = (Convert.ToInt64(DGSanad.CurrentRow.Cells[DGSanad.CurrentCell.ColumnIndex + 1].Value) * 1000).ToString();
    DGSanad.CurrentCell = DGSanad.CurrentRow.Cells[DGSanad.CurrentCell.ColumnIndex + 1];
    }
    }
    }
    }

    }

    که قسمت اولش مربوط به وارد نشدن کاراکتر غیر عددی که ربطی به این داستان نداره
    بعد در آخر چون برای رفع مشکل value که تو پست های بالا توضیح دادم تو این متد یه بار از سلول خارج ووارد میشم برای اینکه همیشه مکان نما آخر تکس قرار بگیره از کدی که تو پست شما بود استفاده کردم
    یعنی

      private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
    if (DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BED"].Index || DGSanad.CurrentCell.ColumnIndex == DGSanad.Columns["BES"].Index)
    {
    if (DGSanad.CurrentCell.EditType == typeof(DataGridViewTextBoxEditingControl) && DGSanad.CurrentCell.Value!=null)
    {
    if (DGSanad.CurrentCell.Value.ToString() != "0")
    {
    DGSanad.BeginEdit(false);
    ((TextBox)DGSanad.EditingControl).SelectionStart = DGSanad.CurrentCell.Value.ToString().Length + (DGSanad.CurrentCell.Value.ToString().Length/3);
    }
    }
    }
    }

    }


    حالا چرا اون تیکه آخر گفتم مکان نمار رو به اندازه طول رشته + طول رشته تقسیم بر 3 ببر ؟ چون من فرمت سلول رو تنظیم کرده بودم سه کاراکتر سه کاراکتر جدا کنه واسه همین طول رشته و به علاوه تعداد کاراکتر های جدا کننده بکن که اگه این کارو نکنم مکان نما به آخر متن نمیره و به تعداد جدا کننده ها عقب میفتاد
    اقا یه دنیا ممنون کارم راه افتداد البته با لطف شما ایشالا به درد دوستان دیگه مونم بخوره
    آقا مث کلاس اولا توضیح دادم ببخشید گفتم شاید یه درصد از افرادی که میان سوادشون در حد خودم باشه
    یا علی

  9. #9

    نقل قول: وارد کردن سه صفر در سلول datagridview

    کدی که من نوشتم بصورت داینامیک و آنی تغییراتی که توسط کاربر ایجاد میشه رو توی سلول اعمال میکنه و اینجوری نیست که حتما نیاز باشه که فوکوس از سلول خارج بشه تا تغییرات به یکباره اعمال بشه، همچنین مشکل value هم نداره و مقدار editedformatted و value با هر تغییر دقیقا باهم برابر میشن

    پروژه تست خودم رو آپلود میکنم یه بررسی و تست کنین، اما در هر حال خوشحالم که مشکلتون برطرف شد
    فایل های ضمیمه فایل های ضمیمه

  10. #10
    کاربر تازه وارد آواتار svhasvha
    تاریخ عضویت
    آذر 1390
    محل زندگی
    کرمانشاه
    پست
    89

    نقل قول: وارد کردن سه صفر در سلول datagridview

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    کدی که من نوشتم بصورت داینامیک و آنی تغییراتی که توسط کاربر ایجاد میشه رو توی سلول اعمال میکنه و اینجوری نیست که حتما نیاز باشه که فوکوس از سلول خارج بشه تا تغییرات به یکباره اعمال بشه، همچنین مشکل value هم نداره و مقدار editedformatted و value با هر تغییر دقیقا باهم برابر میشن

    پروژه تست خودم رو آپلود میکنم یه بررسی و تست کنین، اما در هر حال خوشحالم که مشکلتون برطرف شد
    زنده باشی یه دنیا از لطف و وقتی که گذاشتی ممنونم
    حتما مجدد برسی و ازش استفاده میکنم
    قطعا کد من نیاز به بهینه سازی داره و ضرب العجلی بود

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

  1. پاسخ: 4
    آخرین پست: جمعه 09 آبان 1399, 17:49 عصر
  2. پاسخ: 4
    آخرین پست: پنج شنبه 14 آبان 1394, 23:09 عصر
  3. سوال: کپی کردن کامل یک DataGridView به DataGridView دیگر
    نوشته شده توسط ahangari365 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: دوشنبه 08 اردیبهشت 1393, 18:38 عصر
  4. پاسخ: 8
    آخرین پست: شنبه 21 اردیبهشت 1392, 12:33 عصر
  5. پاسخ: 2
    آخرین پست: پنج شنبه 11 خرداد 1391, 08:32 صبح

برچسب های این تاپیک

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

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