【问题标题】:Remove repeated values from dataGridViewComboBoxColumn从 dataGridViewComboBoxColumn 中删除重复值
【发布时间】:2011-04-07 09:14:05
【问题描述】:

我使用DataGridViewComboBoxColumnDataGridView 中创建ComboBox,但我的ComboBox 不够好。我需要我的ComboBox 上没有重复值。这是一个例子:

苹果
黑莓
Chrome
苹果

我想删除多次出现的值。我该怎么做?

这是我的代码:

OleDbConnection conn = new OleDbConnection();
OleDbCommand cmd = new OleDbCommand();
Dataset data = new Dataset();
OleDbDataAdapter adapter = new OleDbDataAdapter();
string path = "Data Source = "+".\\"+"test.accdb";
string conStr = "Provider = Microsoft.ACE.OleDb.12.0;"+@path;
conn.Open();
string sql = "SELECT * FROM Table1;"
cmd = new OleDbCommand(sql,conn);
adapter = new OleDbDataAdapter(cmd);
data = new Dataset();
adapter.Fill(data,"Table1");
DataGridViewComboBoxColumn testcolumn = new DataGridViewComboBoxColumn();
testcolumn.Name = "test na ja";
testcolumn.Datasource = data.table[0];
testcolumn.ValueMember = "Remedy";
testcolumn.DisplayMember = "Remedy";
dataGridview1.Columns.Add(testcolumn);
conn.Close()

【问题讨论】:

    标签: sql datagridview combobox distinct datagridcomboboxcolumn


    【解决方案1】:

    更改SELECT 语句以返回remedy 的不同值:

    string sql = "SELECT DISTINCT remedy FROM Table1;"
    

    如果您想订购:

    string sql = "SELECT DISTINCT remedy FROM Table1 ORDER BY remedy ASC;"
    

    string sql = "SELECT DISTINCT remedy FROM Table1 ORDER BY remedy DESC;"
    

    【讨论】:

      【解决方案2】:

      除了将 distinct 语句应用于您的 SQL 之外,还可以在创建第二个表时将 distinct 应用于原始 DataTable,如下所示(包含单元测试和帮助器类,我曾经对此进行原型制作) .

      我在下面添加了一条注释以突出显示应用不同的行 - 您使用的是 .ToTable() 方法,该方法采用布尔参数 Distinct 来指定仅返回不同的行。

      [TestMethod]
      public void CreateDistinctDataTable()
      {
          DataTable originalTable = CreateDataTable();
      
          AddDataToTable("Fred", "Bloggs", originalTable);
          AddDataToTable("Fred", "Bloggs", originalTable);
          AddDataToTable("John", "Doe", originalTable);
      
          // This is the key line of code where we use the .ToTable() method
          DataTable distinctTable = originalTable.DefaultView.ToTable( /*distinct*/ true);
      
          // The original table has two rows with firstname of Fred
          Assert.AreEqual(2, originalTable.Select("firstname = 'Fred'").Length);
      
          // The new table only has one row with firstname of Fred
          Assert.AreEqual(1, distinctTable.Select("firstname = 'Fred'").Length);
      }
      
      private DataTable CreateDataTable()
      {
          DataTable myDataTable = new DataTable();
      
          DataColumn myDataColumn;
      
          myDataColumn = new DataColumn();
          myDataColumn.DataType = Type.GetType("System.String");
          myDataColumn.ColumnName = "firstname";
          myDataTable.Columns.Add(myDataColumn);
      
          myDataColumn = new DataColumn();
          myDataColumn.DataType = Type.GetType("System.String");
          myDataColumn.ColumnName = "lastname";
          myDataTable.Columns.Add(myDataColumn);
      
          return myDataTable;
      }
      
      private void AddDataToTable(string firstname,  string lastname, DataTable myTable)
      {
          DataRow row = myTable.NewRow();
      
          row["firstname"] = firstname;            
          row["lastname"] = lastname;
      
          myTable.Rows.Add(row);
      } 
      

      另外一个想法是我建议不要在 SQL 语句中从您的表中选择 *。如果添加更多列(尤其是像 blob 之类的内容),这可能会对性能产生影响,也可能意味着您获得的列会破坏查询的独特性质。

      【讨论】:

        猜你喜欢
        • 2013-04-20
        • 2014-03-25
        • 2018-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-29
        • 2021-04-02
        • 2019-12-08
        相关资源
        最近更新 更多