2011-04-07 105 views
0

我用DataGridViewComboBoxColumn来制作ComboBoxDataGridView但我的ComboBox不够好。我需要我的ComboBox没有重复的值。这是一个例子:从dataGridViewComboBoxColumn中删除重复的值

苹果
黑莓

苹果

我想删除出现一次以上的值。我怎样才能做到这一点?

这是我的代码:

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;"[email protected]; 
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() 

回答

0

变化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;" 
0

除了应用不同的语句到SQL有可能创建第二表时于不同的向原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这样的东西),这可能会影响性能,也可能意味着您会获得破坏查询独特性质的列。