简体   繁体   中英

C# Add Combobox and Checkbox for DataGridView Combined SQL Table

I have a table as following in SQL Database. Devicereg Table.

  No   |    Parameter | DataTyp  |  Enable  | 
  1            xxxx      Int         True
  2            yyyy      Int         True
  3            tttt      String      False

I want to show these data in DataGridView and its DataTyp column want to add Combobox with default value table cell value, Enable column want to add a checkbox with default value table cell value.

Combobox want to add the following list and the default value is one of following value.

  • Int
  • String
  • Floart

Following code, Combobox value adds all columns value in one combo box.

Code:

    string connetionString = null;
        SqlConnection connection;
        SqlDataAdapter adapter = new SqlDataAdapter();
        string sql = null;
        bool st = false;

        DataSet ds = new DataSet();
        connection = new SqlConnection(connetionString);
        sql = "select * from Devicereg";
            try
            {
                connection.Open();
                adapter.SelectCommand = new SqlCommand(sql, connection);
                adapter.Fill(ds);
                connection.Close();
                dataGridView1.DataSource = null;
                dataGridView1.ColumnCount = 0;
         
                dataGridView1.DataSource = ds.Tables[0];

                DataGridViewComboBoxColumn dc = new DataGridViewComboBoxColumn();
                dc.DataSource = ds.Tables[0];
                dc.ValueMember = "Datatyp";

                dataGridView1.Columns.Add(dc);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

Example Photo:

在此处输入图像描述

Edit 1:

I have done it but how to display only defined items in the dropdown.

Code:

DataGridViewComboBoxColumn dc = new DataGridViewComboBoxColumn();
dc.DataSource = ds.Tables[0];
dc.DataPropertyName = "Datatyp";
dc.ValueMember = "Datatyp";
dc.DisplayMember = "Datatyp";

I have 36 rows and all rows Datatyp values shows. I want specific items to select like Int, Flort, Strings only.

Output:

在此处输入图像描述

Edit 2:

If I set like the following code, I got error message.

DataGridViewComboBoxColumn dc = new DataGridViewComboBoxColumn();
dc.DataSource = new List<string> { "Int", "String", "Flort" };
dc.DataPropertyName = "Datatyp";
dc.ValueMember = "Datatyp";
dc.DisplayMember = "Datatyp";

Error:

在此处输入图像描述

To import the DataTyp from database to DataGridViewComboBoxColumn , please refer to the following steps.

First, add the columns to datagridview. Set the DataTyp 's columntype to DataGridViewComboBoxColumn , and set its DataSource like:

在此处输入图像描述

Next, set Enable columntype to DataGridViewCheckBoxColumn .

Or via code:

var colNo = new DataGridViewTextBoxColumn
{
    HeaderText = "No",
    Name = "No"
};
var colParameter = new DataGridViewTextBoxColumn
{
    HeaderText = "Parameter",
    Name = "Parameter"
};
var colDataTyp = new DataGridViewComboBoxColumn
{
    HeaderText = "DataTyp",
    Name = "DataTyp",
    DataSource = new List<string> { "Int", "String", "Float" }
};
var colEnable = new DataGridViewCheckBoxColumn
{
    HeaderText = "Enable",
    Name = "Enable"
};

dataGridView1.Columns.AddRange(new DataGridViewColumn[] { colNo, colParameter, colDataTyp, colEnable });

Then fill the datagridview via the code below.

DataSet ds;
string connetionString = @"Connection String";
using (SqlConnection conn = new SqlConnection(connetionString))
{
    SqlDataAdapter sda = new SqlDataAdapter("Select * From Devicereg", conn);
    ds = new DataSet();
    sda.Fill(ds, "T1");
}

DataGridViewComboBoxCell typeCell;

foreach (DataRow row in ds.Tables[0].Rows)
{
    int index = dataGridView1.Rows.Add();
    dataGridView1.Rows[index].Cells["No"].Value = row[0];
    dataGridView1.Rows[index].Cells["Parameter"].Value = row[1];

    typeCell = (DataGridViewComboBoxCell)(dataGridView1.Rows[index].Cells["DataTyp"]);
    typeCell.Value = row[2].ToString().Trim();

    dataGridView1.Rows[index].Cells["Enable"].Value = row[3];
}

The result,

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM