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

نام تاپیک: لطفا کمک کنید ! کار با کامپوننت datagridview

  1. #1
    کاربر تازه وارد آواتار Amir.pc_66
    تاریخ عضویت
    آذر 1387
    محل زندگی
    Iran-Tabriz
    پست
    51

    Question لطفا کمک کنید ! کار با کامپوننت datagridview

    آقا تو رو خدا هرکی بلده کمک کنه !
    مشکل اینه که میخوام یکی از ستونای Datagridview رو Combobox بذارم ولی مشکل به این راحتی حل نمیشه - مشکل اصلی اینه که میخوام اون Combobox تو خصوصیت Dropdownstyle اش مقدار Dropdown رو داشته باشه نه خاصیت Dropdownlist

    به عبارت ساده تر خاصیت نوشتاری بودن Combobox رو هم میخوام نه فقط خاصیت انتخابی

    به عبارت ساده ترترتر مثل Search Google

    Datasource کامبوباکس رو خودم میدم


    سوال دیگه اینکه با چه دستوری میتونم به هریک از سلولهای Datagridview دسترسی داشته باشم؟

    ممنون از دوستایی که کمک می کنن

  2. #2
    کاربر دائمی آواتار AliSaeedi_v
    تاریخ عضویت
    آذر 1390
    محل زندگی
    اصفهان-ولاشان
    پست
    166

    نقل قول: لطفا کمک کنید ! کار با کامپوننت datagridview

    سلام سوال اولت که وقتی از کامبو باکس استفاده میکنی باید بگی selected text
    سوال دوم

    datagrid[شماره ستون,شماره سطر].value

  3. #3

    نقل قول: لطفا کمک کنید ! کار با کامپوننت datagridview

    دوست عزیز اصلا سوال اولت واضح نیست ، ولی اگه خوب فهمیده باشم باید از خاصیت AutoCompleteSource کامبو استفاده کنین...

    موفق باشید./

  4. #4
    کاربر تازه وارد آواتار Amir.pc_66
    تاریخ عضویت
    آذر 1387
    محل زندگی
    Iran-Tabriz
    پست
    51

    نقل قول: لطفا کمک کنید ! کار با کامپوننت datagridview

    ممنون از دوستان که جواب دادین ولی فکر کنم سوالو خوب توضیح ندادم.
    سوال اینه
    وقتی ما یک کامبوباکس استفاده میکنیم یه خاصیت داره به نام Dropdownstyle که اگه روی Dropdown بذاریم میتونیم داخلش یه چیزهایی هم خودمون بنویسیم ولی اگر روی Dropdownlist بذاریم دیگه خاصیت نوشتاری برامون نداره فقط میتونیم از بین آیتمهاش انتخاب کنیم
    همین
    حالا اگه ما یه ستون از Datagrid رو به عنوان کامبوباکس در نظر بگیریم این خاصیت رو کامبو نداره

    هدف از این سوال هم اینه که کاربر بتونه اطلاعات Datagrid رو بصورت دستی وارد کنه ولی Datasource کامبو رو از پایگاه داده بیاره با این عمل اضافی که هر چی تو کامبو مینویسه بعنوان یک Text تو Datasource خود کامبو جستجو بشه

    امیدوارم سوال کاملا مفهوم باشه

  5. #5

    نقل قول: لطفا کمک کنید ! کار با کامپوننت datagridview

    يك راهش اينه كه اطلاعات داخل گريد رو با حلقه For بريزي توي كوبو(ADD) .خاصيت Sort رو هم True بذاري.تا اطلاعات رو مرتب شده بياره.


    int cntAnbar = dgv.Rows.Count;
    for (int i = 0; i < cntAnbar; i++)
    {
    cmbCodeAnbar.Items.Add(dgv["Column", i].Value.ToString());
    }


  6. #6
    کاربر دائمی آواتار modern_amin
    تاریخ عضویت
    آذر 1389
    محل زندگی
    کنار شما !
    پست
    595

    نقل قول: لطفا کمک کنید ! کار با کامپوننت datagridview


  7. #7
    کاربر تازه وارد آواتار Amir.pc_66
    تاریخ عضویت
    آذر 1387
    محل زندگی
    Iran-Tabriz
    پست
    51

    نقل قول: لطفا کمک کنید ! کار با کامپوننت datagridview

    بازم سوال منو متوجه نشدین!

    سوال اینه ! چطوری میشه یه ستون از Datagridview رو به عنوان کامبو تعریف کرد به شرطی که بشه توی Combobox یه چیزی نوشت نه اینکه فقط ازش انتخاب کرد

    دوستان لطفا تست کنن بعد جواب بدن!

    هرکی بتونه جوابی بده هر سوالی داشته باشه جواب میدم!

  8. #8
    کاربر دائمی
    تاریخ عضویت
    آذر 1385
    محل زندگی
    اراک
    پست
    230

    نقل قول: لطفا کمک کنید ! کار با کامپوننت datagridview

    بصورت default این عمل امکان ندارد ولی می تونی از کد زیر استفاده کنی این هم لینک منبعش

    ' create combocolum...
    Dim
    combocolum As New DataGridViewComboBoxColumn
    combocolum.DefaultCellStyle.Tag = "editable" ' this is the enhance to control if editable or not
    combocolum.HeaderText = "Status"
    combocolum.DataPropertyName = "Status"
    combocolum.Items.Add("SOLD OUT")
    combocolum.Items.Add("CHEAP IN")
    combocolum.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing
    DataGridView1.Columns.Add(combocolum)

    ' ---------------- copy / paste -----------
    Enum
    CBO_MODE
    NORMAL = 0
    EDITABLE = 1
    EDITABLE_WITH_NOTIFYCURRENTCELLDIRTY = 2
    End Enum Const ALLOW_ADDS As Boolean = True
    Private MODE As CBO_MODE = CBO_MODE.EDITABLE_WITH_NOTIFYCURRENTCELLDIRTY
    PrivateSub dataGridView1_EditingControlShowing(ByVal sender AsObject, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
    ' Here you control if combobox will be editable or not
    If e.CellStyle.Tag = "editable"Then
    Dim dataGridView1 As DataGridView = CType(sender, DataGridView)
    If (TypeOf (e.Control) Is ComboBox) Then
    Dim cb As ComboBox = CType(e.Control, ComboBox)
    If (Not cb IsNothing) Then
    cb.DropDownStyle = ComboBoxStyle.DropDown
    If (MODE = CBO_MODE.EDITABLE_WITH_NOTIFYCURRENTCELLDIRTY) Then
    ' Added thanks to Ying Liu, Microsoft Support
    dataGridView1.NotifyCurrentCellDirty(True)
    EndIf
    EndIf
    EndIf
    EndIf
    EndSub

    Private
    Sub dataGridView1_CellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
    Dim dataGridView1 As DataGridView = CType(sender, DataGridView)
    If (TypeOf dataGridView1.Columns(e.ColumnIndex) Is DataGridViewComboBoxColumn) Then
    Dim comboBoxColumn As DataGridViewComboBoxColumn = dataGridView1.Columns(e.ColumnIndex)
    If (Not comboBoxColumn.Items.Contains(e.FormattedValue)) Then
    If (ALLOW_ADDS) Then
    Beep() ' Audio confirmation that the item has been added (optional)
    comboBoxColumn.Items.Add(e.FormattedValue)
    Else
    ' How do we cancel?
    e.Cancel = True
    End If
    End If
    End If
    End Sub


  9. #9
    کاربر دائمی
    تاریخ عضویت
    آذر 1385
    محل زندگی
    اراک
    پست
    230

    نقل قول: لطفا کمک کنید ! کار با کامپوننت datagridview

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


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsFormsApplication2
    {
    public partial class Form3 : Form
    {
    public Form3()
    {
    InitializeComponent();
    }
    DataGridViewComboBoxColumn comboColumn;

    DataTable dt;

    DataTable dt2;
    private void Form3_Load(object sender, EventArgs e)
    {






    dt = new DataTable();

    dt.Columns.Add("comboColumn");

    dt.Columns.Add("col");

    dt.Rows.Add("id1", "abc");

    dt.Rows.Add("id2", "def");



    dt2 = new DataTable();

    dt2.Columns.Add("comboCol");

    dt2.Rows.Add("id1");

    dt2.Rows.Add("id2");



    dataGridView1.AutoGenerateColumns = false;

    comboColumn = new DataGridViewComboBoxColumn();

    comboColumn.DataPropertyName = "comboColumn";

    comboColumn.DisplayMember = "comboCol";

    comboColumn.ValueMember = "comboCol";

    comboColumn.DataSource = dt2;





    DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn();

    textColumn.DataPropertyName = "col";

    dataGridView1.Columns.Add(comboColumn);

    dataGridView1.Columns.Add(textColumn);

    dataGridView1.DataSource = dt;



    dataGridView1.CellValidating += new DataGridViewCellValidatingEventHandler(dataGridVie w1_CellValidating);

    dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(data GridView1_EditingControlShowing);

    }



    void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {

    if (this.dataGridView1.CurrentCellAddress.X == comboColumn.DisplayIndex)
    {

    ComboBox cb = e.Control as ComboBox;

    if (cb != null)
    {

    cb.DropDownStyle = ComboBoxStyle.DropDown;

    }

    }

    }



    void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)

    {

    if (e.ColumnIndex == comboColumn.DisplayIndex)

    {

    if (!dataCheck(e.FormattedValue.ToString(), dt2, 0))

    {

    dt2.Rows.Add(e.FormattedValue);

    comboColumn.DataSource = dt2;

    dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue;

    }

    }

    }



    private bool dataCheck(string value, DataTable datatable, int columnIndex)

    {

    bool result = false;

    if (datatable != null)

    {

    for (int i = 0; i < datatable.Rows.Count; i++)

    {

    if (datatable.Rows[i].ItemArray.GetValue(columnIndex).ToString() == value)

    {

    result = true;

    break;

    }

    }

    }

    return result;

    }






    }

    }


  10. #10
    کاربر تازه وارد آواتار Amir.pc_66
    تاریخ عضویت
    آذر 1387
    محل زندگی
    Iran-Tabriz
    پست
    51

    نقل قول: لطفا کمک کنید ! کار با کامپوننت datagridview

    نقل قول نوشته شده توسط amir3321 مشاهده تاپیک
    بصورت default این عمل امکان ندارد ولی می تونی از کد زیر استفاده کنی این هم لینک منبعش

    ' create combocolum...
    Dim
    combocolum As New DataGridViewComboBoxColumn
    combocolum.DefaultCellStyle.Tag = "editable" ' this is the enhance to control if editable or not
    combocolum.HeaderText = "Status"
    combocolum.DataPropertyName = "Status"
    combocolum.Items.Add("SOLD OUT")
    combocolum.Items.Add("CHEAP IN")
    combocolum.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing
    DataGridView1.Columns.Add(combocolum)

    ' ---------------- copy / paste -----------
    Enum
    CBO_MODE
    NORMAL = 0
    EDITABLE = 1
    EDITABLE_WITH_NOTIFYCURRENTCELLDIRTY = 2
    End Enum Const ALLOW_ADDS As Boolean = True
    Private MODE As CBO_MODE = CBO_MODE.EDITABLE_WITH_NOTIFYCURRENTCELLDIRTY
    PrivateSub dataGridView1_EditingControlShowing(ByVal sender AsObject, ByVal e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
    ' Here you control if combobox will be editable or not
    If e.CellStyle.Tag = "editable"Then
    Dim dataGridView1 As DataGridView = CType(sender, DataGridView)
    If (TypeOf (e.Control) Is ComboBox) Then
    Dim cb As ComboBox = CType(e.Control, ComboBox)
    If (Not cb IsNothing) Then
    cb.DropDownStyle = ComboBoxStyle.DropDown
    If (MODE = CBO_MODE.EDITABLE_WITH_NOTIFYCURRENTCELLDIRTY) Then
    ' Added thanks to Ying Liu, Microsoft Support
    dataGridView1.NotifyCurrentCellDirty(True)
    EndIf
    EndIf
    EndIf
    EndIf
    EndSub

    Private
    Sub dataGridView1_CellValidating(ByVal sender As Object, ByVal e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
    Dim dataGridView1 As DataGridView = CType(sender, DataGridView)
    If (TypeOf dataGridView1.Columns(e.ColumnIndex) Is DataGridViewComboBoxColumn) Then
    Dim comboBoxColumn As DataGridViewComboBoxColumn = dataGridView1.Columns(e.ColumnIndex)
    If (Not comboBoxColumn.Items.Contains(e.FormattedValue)) Then
    If (ALLOW_ADDS) Then
    Beep() ' Audio confirmation that the item has been added (optional)
    comboBoxColumn.Items.Add(e.FormattedValue)
    Else
    ' How do we cancel?
    e.Cancel = True
    End If
    End If
    End If
    End Sub

    این اشتباهه !

  11. #11
    کاربر تازه وارد آواتار Amir.pc_66
    تاریخ عضویت
    آذر 1387
    محل زندگی
    Iran-Tabriz
    پست
    51

    نقل قول: لطفا کمک کنید ! کار با کامپوننت datagridview

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


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsFormsApplication2
    {
    public partial class Form3 : Form
    {
    public Form3()
    {
    InitializeComponent();
    }
    DataGridViewComboBoxColumn comboColumn;

    DataTable dt;

    DataTable dt2;
    private void Form3_Load(object sender, EventArgs e)
    {






    dt = new DataTable();

    dt.Columns.Add("comboColumn");

    dt.Columns.Add("col");

    dt.Rows.Add("id1", "abc");

    dt.Rows.Add("id2", "def");



    dt2 = new DataTable();

    dt2.Columns.Add("comboCol");

    dt2.Rows.Add("id1");

    dt2.Rows.Add("id2");



    dataGridView1.AutoGenerateColumns = false;

    comboColumn = new DataGridViewComboBoxColumn();

    comboColumn.DataPropertyName = "comboColumn";

    comboColumn.DisplayMember = "comboCol";

    comboColumn.ValueMember = "comboCol";

    comboColumn.DataSource = dt2;





    DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn();

    textColumn.DataPropertyName = "col";

    dataGridView1.Columns.Add(comboColumn);

    dataGridView1.Columns.Add(textColumn);

    dataGridView1.DataSource = dt;



    dataGridView1.CellValidating += new DataGridViewCellValidatingEventHandler(dataGridVie w1_CellValidating);

    dataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(data GridView1_EditingControlShowing);

    }



    void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {

    if (this.dataGridView1.CurrentCellAddress.X == comboColumn.DisplayIndex)
    {

    ComboBox cb = e.Control as ComboBox;

    if (cb != null)
    {

    cb.DropDownStyle = ComboBoxStyle.DropDown;

    }

    }

    }



    void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)

    {

    if (e.ColumnIndex == comboColumn.DisplayIndex)

    {

    if (!dataCheck(e.FormattedValue.ToString(), dt2, 0))

    {

    dt2.Rows.Add(e.FormattedValue);

    comboColumn.DataSource = dt2;

    dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.FormattedValue;

    }

    }

    }



    private bool dataCheck(string value, DataTable datatable, int columnIndex)

    {

    bool result = false;

    if (datatable != null)

    {

    for (int i = 0; i < datatable.Rows.Count; i++)

    {

    if (datatable.Rows[i].ItemArray.GetValue(columnIndex).ToString() == value)

    {

    result = true;

    break;

    }

    }

    }

    return result;

    }






    }

    }


    ولی این یکی درسته مرسی از لطفتون که کمک کردین
    البته فقط اینجاش کافیه

    void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) {

    if (this.dataGridView1.CurrentCellAddress.X == comboColumn.DisplayIndex)
    {

    ComboBox cb = e.Control as ComboBox;

    if (cb != null)
    {

    cb.DropDownStyle = ComboBoxStyle.DropDown;

    }

    }

    }



    البته بهتر از اون هم اینجوری

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
    if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl))
    {

    DataGridViewComboBoxEditingControl combo = e.Control as DataGridViewComboBoxEditingControl;
    combo.DropDownStyle = ComboBoxStyle.DropDown;
    }
    }




    بازم ازتون ممنونم


  12. #12

    نقل قول: لطفا کمک کنید ! کار با کامپوننت datagridview

    برای بدست آوردن یک سلول خاص
    DataGridView1.CurrentRow.Cells[Columnname Or Index].value.tostring()

  13. #13
    کاربر تازه وارد آواتار Amir.pc_66
    تاریخ عضویت
    آذر 1387
    محل زندگی
    Iran-Tabriz
    پست
    51

    نقل قول: لطفا کمک کنید ! کار با کامپوننت datagridview

    نقل قول نوشته شده توسط mohsenyazarloo مشاهده تاپیک
    برای بدست آوردن یک سلول خاص
    DataGridView1.CurrentRow.Cells[Columnname Or Index].value.tostring()

    دوست عزیز این دستور واسه سطری هستش که توسط کاربر انتخاب شده باشه

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

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

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

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