2014-01-20 4 views
1

В моей DataGrid я использовал ComboBox в первом столбце, поэтому он будет извлекать некоторые данные из базы данных, используя концепции . Теперь я хочу удалить значение из ComboBox, который был выбран ранее.Удалить строку из datatable в соответствии с условием

Наполнение кода ComboBox приведен ниже:

dTable = getDummyTable.GetDummyTble("Dummy", "DNO", "All"); 
    dCmbData = dTable; 
    cmbDeno.DataSource = dTable; 
    cmbDeno.DisplayMember = "dyName"; 
    cmbDeno.ValueMember = "dyRemarks"; 

Следующая строка выбора не должна быть дубликатом значения в ComboBox.

Как я могу это достичь?

Может ли кто-нибудь помочь мне с этим?

+0

Какой интерфейс? WPF? WinForms? – StevieB

+0

Это winforms в C# – ShaQue

+0

Что именно ваша проблема? В заголовке указано, что вы хотите удалить строку из DataTable. Вопрос говорит, что вы хотите удалить дублирующее значение из ComboBox. В комментариях говорится, что вы хотите удалить ранее выбранное значение. Пожалуйста, определите, что именно вы пытаетесь сделать. –

ответ

1

хорошо попробуйте этот один из. У вас есть DataTable, который вы используете для привязки всех комбо (исправьте меня, если я ошибаюсь). Теперь все, что нам нужно сделать, это то, что, когда элемент выбран из любого комбо, нам нужно удалить этот элемент из всех остальных комбо). Вам нужно будет объявить словарь уровня класса для хранения комбо было то, что значение, сохраненное ранее:

IDictionary<ComboBox, DataRow> _prevSelection; 

//Please don't mind if syntax is wrong worked too long in web 
comboBox.OnSelectedIndexChanged += fixItems; 

private void fixItems(object sender, EventArgs e) 
{ 
    var cbo= sender as ComboBox; 
    if(cbo==null) return; 

    var prev = _prevSelection[cbo]; 

    var row=<GET ROW FROM DATATABLE FOR CURRENT SELECTED VALUE>; 

    _prevSelection[cbo] = row; 

    UpdateOtherCombos(cbo, prev, cbo.SelectedItem.Value); 
} 

private void UpdateOtherCombos(ComboBox cbo, DataRow prev, object toRemove) 
{ 
    foreach(var gridrow in <YourGrid>.Rows) 
    { 
     var c = <FIND COMBO IN ROW>; 
     if(cbo.Id == c.Id) continue;//combo that triggered this all 
     var itemToRemove=null; 
     foreach(var item in c.Items) 
     { 
      if(item.Value == toRemove) 
      { 
       itemToRemove = item; 
       break; 
      } 
     } 

     //or you can get index of item and remove using index 
     c.Items.Remove(itemToRemove); 

     //Now add the item that was previously selected in this combo (that 
     //triggered this all) 
     c.Items.Add(new ComboBoxItem{Value = prev["ValueColumn"], 
             Text = prev ["TextColumn"]}); 
    } 
} 

Это просто чтобы дать вам представление о том, что может помочь вам найти оптимальное решение, а не перебирает все комбинации, как он будет замедляться, если у вас слишком много строк в сетке или слишком много элементов в комбо. Тем не менее, даже с этим вам нужно поставить некоторые функции/код, чтобы заставить его работать. Также обратите внимание, что я некоторое время не работал над WinForms, и вам нужно проверить, есть ли такие вещи, как ComboBoxItem и т. Д., И любые вызываемые на них функции существуют. :)

+0

@VillageIdiot спасибо ... – ShaQue

+0

хорошо рад, что я смог помочь. был последним печатанием, прежде чем я ударил по кровати. :) – TheVillageIdiot

Смежные вопросы