繁体   English   中英

C# 为 DataGridView 添加 Combobox 和复选框组合 SQL 表

[英]C# Add Combobox and Checkbox for DataGridView Combined SQL Table

我在 SQL 数据库中有一个如下表。 Devicereg

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

我想在 DataGridView 中显示这些数据,它的 DataTyp 列想要添加 Combobox 和默认值表格单元格值,启用列想要添加一个带有默认值表格单元格值的复选框。

Combobox 要添加以下列表,默认值为以下值之一。

  • 诠释
  • 细绳
  • 花车

以下代码,Combobox 值将所有列值添加到一个组合框中。

代码:

    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());
            }

示例照片:

在此处输入图像描述

编辑1:

我已经完成了,但是如何在下拉列表中只显示定义的项目。

代码:

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

我有 36 行,所有行 Datatyp 值都显示。 我想要 select 的特定项目,比如 Int、Flort、Strings。

Output:

在此处输入图像描述

编辑2:

如果我像下面的代码一样设置,我会收到错误消息。

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

错误:

在此处输入图像描述

要将DataTyp从数据库导入到DataGridViewComboBoxColumn ,请参考以下步骤。

首先,将列添加到 datagridview。 DataTyp的 columntype 设置为DataGridViewComboBoxColumn ,并将其 DataSource 设置为:

在此处输入图像描述

接下来,将Enable columntype 设置为DataGridViewCheckBoxColumn

或通过代码:

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 });

然后通过下面的代码填充datagridview。

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];
}

结果,

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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