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

نام تاپیک: مشکل در DataGridView

  1. #1

    Exclamation مشکل در DataGridView

    با عرض سلام
    من در یکی از فرمهای برنامه از DGV استفاده کرده ام که نتایج یک دستور select را در آن نشان میدهد.
    در یکی از فیلدها که از نوع عددی می باشد اگر رشته ای وارد شود یک پیام خطا میدهد.
    چگونه باید از وارد کردن رشته در آن فیلد جلو گیری کنم؟
    چگونه در صورتی که رشته وارد شد خودم یک پیام خطای فارسی بدهم؟ (چون هیچ خطایی در سی شارپ اتفاق نمی‌افتد)

    لطفا به من کمک کنید

    منتظرم

  2. #2
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: مشکل در DataGridView

    خوب اگه فقط برای نمایش داده ها از دیتاگرید استفاده می کنید خاصیت های Enable Adding ,Editing,Deleting گرید رو UnChecked کنید
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  3. #3

    نقل قول: مشکل در DataGridView

    از جوابتان خیلی ممنون اما:
    من هم برای نمایش و هم برای ویرایش نیاز دارم.
    بنابراین این روش برای من مناسب نیست.

  4. #4

    نقل قول: مشکل در DataGridView

    سلام
    میتونی اون column رو با این column به نام TextBoxColumn که کدش هست جایگزین کنی




    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    namespace TextBoxColumnFilter
    {
    publicclass TextBoxColumn : DataGridViewColumn
    {
    public TextBoxColumn() : base(newTextBoxCell())
    {
    }
    publicoverrideDataGridViewCell CellTemplate
    {
    get
    {
    returnbase.CellTemplate;
    }
    set
    {
    if (value != null && !value.GetType().IsAssignableFrom(typeof(TextBoxCell)))
    {
    thrownewInvalidCastException("Error");
    }
    base.CellTemplate = value;
    }
    }
    }
    publicclassTextBoxCell : DataGridViewTextBoxCell
    {
    public TextBoxCell() : base()
    {
    }
    publicoverrideType EditType
    {
    get
    {
    returntypeof(EditTextBoxCell);
    }
    }
    publicoverridevoid InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
    {
    base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
    EditTextBoxCell editingControl = base.DataGridView.EditingControl asEditTextBoxCell;
    if (editingControl != null)
    {
    editingControl.BorderStyle = BorderStyle.None;
    editingControl.AcceptsReturn = editingControl.Multiline = dataGridViewCellStyle.WrapMode == DataGridViewTriState.True;
    editingControl.MaxLength = this.MaxInputLength;
    string str = initialFormattedValue asstring;
    if (str == null)
    {
    editingControl.Text = string.Empty;
    }
    else
    {
    editingControl.Text = str;
    }
    }

    }
    }
    publicclassEditTextBoxCell : DataGridViewTextBoxEditingControl
    {
    public EditTextBoxCell() : base()
    {
    this.KeyPress += newKeyPressEventHandler(EditTextBoxCell_KeyPress);
    }
    void EditTextBoxCell_KeyPress(object sender, KeyPressEventArgs e)
    {
    if (!char.IsDigit(e.KeyChar) && ((int)e.KeyChar) != 8)
    e.KeyChar = char.MinValue;

    }
    }
    }





    برای جابجا کردن Column هم میتونی از تابع ساده زیر استفاده کنی که درکد فرم هست




    publicvoid AddMeTextBoxColumn(string ColumnName, string HeaderText)
    {
    int ColumnDisplayIndex = dataGridView1.Columns[ColumnName].DisplayIndex;
    dataGridView1.Columns.Remove(ColumnName);
    TextBoxColumn column_addcombo = newTextBoxColumn();
    column_addcombo.DataPropertyName = ColumnName;
    column_addcombo.Name = ColumnName;
    column_addcombo.HeaderText = HeaderText;
    column_addcombo.DisplayIndex = ColumnDisplayIndex;
    dataGridView1.Columns.Add(column_addcombo);
    }


    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله rostamkhani : پنج شنبه 13 تیر 1387 در 02:01 صبح

  5. #5

    نقل قول: مشکل در DataGridView

    یه مشکلی با کد شما دارم
    و آن این است که تابعی که برای جایجایی Column استفاده کرده ام وقتی از چند ستون استفاده می کنم مشکل پیش می آید.

    یک ساده تر برای همین کاری که برنامه اتان انجام می دهد ندارید؟؟؟
    همچنین از کمکتان خیلی ممنونم
    منتظرم

  6. #6
    کاربر دائمی
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    ساري
    سن
    38
    پست
    296

    نقل قول: مشکل در DataGridView

    این مشکل با یک ifدر هنگام save حل میشه

  7. #7

    نقل قول: مشکل در DataGridView

    یک راه ساده تر که شما میتونی توسط کد زیر بعد از پر کردن DataGridView خودت هر ستونی که خواستی رو معین کنی که Cell سلولهای اون Column از چه کلاسی باشن یا بطور کلی CellTemplate رو مشخص کنی


    dataGridView1.Columns[0].CellTemplate = new TextBoxCell();

    یا

    dataGridView1.Columns["ColumnName"].CellTemplate = new TextBoxCell();

    کلاس TextBoxCell هم که کدش بالا هست و خودمون نوشتیم و هر جور که بخواهیم میتونیم تغییرش بدیم

  8. #8

    نقل قول: مشکل در DataGridView

    خیلی ممنون از پاسختان.
    من می خواهم در دیتا گرید هیچ مقداری وارد نشود آیا این ممکن است؟؟؟
    همچنین من می خواهم که با زدن کلید اینتر بجای رفتن به سطر بعد, به ستون بعدی برود. من برای اینکار در رویدادی که کلید فشرده شد اگر اینتر بود کلید Tab می فرستد.
    ولی در هنگامی که فیلد در حال ویرایش است با زدن اینتر به سطر بعد می رود چگونه باید این مشکل را حل کنم؟؟؟

  9. #9

    نقل قول: مشکل در DataGridView

    این مشکل قابل حل نیست؟؟؟(با زدن اینتر به ستون بعدی برود)

  10. #10

    نقل قول: مشکل در DataGridView

    آقا بنده برسی کرد ولی به نتیجه ای نرسیدم

  11. #11

    نقل قول: مشکل در DataGridView

    میتونی تو رویداد keyprees تکس باکست این کد رو بنویسی تا فقط عدد بگیره
    if(char.isdigit(e.keychar==false)e.handeled==true;

  12. #12

    نقل قول: مشکل در DataGridView

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

  13. #13

    نقل قول: مشکل در DataGridView

    خواهش میکنم بنده هم از شما ممنونم باهم یه چیزی یاد گرفتیم
    در مورد اینتر بعد از ویرایش هم تنها رویدادی که اتفاق می افتاد CellEndEdit بود و RowLeave ,CellStateChanged
    که با مخلوط این سه تا هم کاری نتونستم بکنم
    فکر کنم باید با Reflector http://www.aisto.com/roeder/dotnet باید کد DataGridView رو بکشیم بیرون و آن جوری که میخواهیم درستش کنیم
    بنده قبلا برای بعضی از کلاسهای net. این کارو کردم و کار زیاد سختیم نیست
    موفق باشید .

  14. #14

    نقل قول: مشکل در DataGridView

    من این راه حل این مشکل را پیدا کردم:


    classmyDataGridView : DataGridView
    {
    protectedoverridebool ProcessDialogKey(Keys keyData)
    {
    if (keyData == Keys.Enter)
    {
    int col = this.CurrentCell.ColumnIndex;
    int row = this.CurrentCell.RowIndex;

    if (row != this.NewRowIndex)
    {
    if (col == (this.Columns.Count - 1))
    {
    col = -1;
    row++;
    }
    this.CurrentCell = this[col + 1, row];
    }
    returntrue;
    }
    returnbase.ProcessDialogKey(keyData);
    }

    protectedoverridevoid OnKeyDown(KeyEventArgs e)
    {
    if (e.KeyData == Keys.Enter)
    {
    int col = this.CurrentCell.ColumnIndex;
    int row = this.CurrentCell.RowIndex;

    if (row != this.NewRowIndex)
    {
    if (col == (this.Columns.Count - 1))
    {
    col = -1;
    row++;
    }
    this.CurrentCell = this[col + 1, row];
    }
    e.Handled = true;
    }
    base.OnKeyDown(e);
    }
    }






    منبع: Make Enter Key Move to Next Column - MSDN Forums
    نمونه دیگر: https://windowsclient.net/blogs/faqs...next-cell.aspx

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

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

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