2012-06-20 3 views
0

У меня есть комбобокс внутри ретранслятора данных, Мне нужно удалить выбранное значение выпадающего списка из остальных повторяющихся списков, чтобы я мог запретить множественный выбор одного и того же значения более чем одним combobox:Комбобокс в ретрансляторе, уникальный выбор

if combobox1 выбранное значение - «john smith» Мне нужно удалить «john smith» из других повторяющихся comboboxes. Любая помощь ?

<asp:Repeater ID="rptTableMapper" runat="server" DataSourceID="dsSQLColumnNames" 
    OnItemDataBound="rptTableMapper_ItemDataBound"> 
    <ItemTemplate> 
     <table width="500px"> 
      <tr> 
       <td> 
        <dx:ASPxComboBox ID="cmbCsvColumns" OnSelectedIndexChanged="cmbCsvColumns_SelectedIndexChanged" 
         runat="server" AutoPostBack="True"> 
        </dx:ASPxComboBox> 
       </td> 
      </tr> 
     </table> 
    </ItemTemplate> 
</asp:Repeater> 

и коды за это

protected void cmbCsvColumns_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string s = ((ASPxComboBox)(sender)).ClientID; 
    string text = ((ASPxComboBox)(sender)).Text; 
    for (int i = 0; i < rptTableMapper.Items.Count; i++) 
    { 
     ASPxComboBox cmb = (ASPxComboBox)(rptTableMapper.Items[i].FindControl("cmbCsvColumns")); 
     ListEditItem selectedItem = ((ASPxComboBox)(sender)).SelectedItem; 
     if (cmb.ClientID != s) 
     { 

     } 
    } 
} 
+0

Угадайте, что вы забыли вставить код. – gabsferreira

+0

код является основным. комбобокс внутри репитера! –

+0

cmbCsvColumns_SelectedIndexChanged code please –

ответ

0

Я не уверен, что если это ваше требование бизнеса или что, но мое предложение не удалить запись из выпадающего списка. Скажем, в строке 1 выбрано пользователем 1, поэтому значение 1 удаляется из других выпадающих списков в оставшихся строках, а в строке 2 пользователь выбирает значение 2, которое также удаляется для остальных. Теперь в строке 1 пользователь выбирает значение 3, теперь вам нужно будет удалить значение 3 из оставшихся выпадающих меню, а также добавить в них значение 1.

Мое предложение - вызвать метод javascript и сохранить выбранные значения в javascript, если пользователь выбирает уже выбранное значение, просто сообщите ему предупреждение, что вы уже выбрали это значение. Благодаря такому подходу вы также можете уменьшить обратную передачу на стороне сервера, если вы выполняете обратную передачу только для удаления значений.
поэтому ваше решение должно быть как:

<asp:Repeater ID="rptTableMapper" runat="server" DataSourceID="dsSQLColumnNames" 
       OnItemDataBound="rptTableMapper_ItemDataBound"> 
       <ItemTemplate> 
        <table width="500px"> 
         <tr> 
          <td> 
           <dx:ASPxComboBox ID="cmbCsvColumns" onchange="cmbCsvColumns_SelectedIndexChanged(this);" 
            runat="server" AutoPostBack="False"> 
           </dx:ASPxComboBox> 
          </td> 
         </tr> 
        </table> 
       </ItemTemplate> 
      </asp:Repeater> 

и ваш Javascript должен быть как:

var selectedValues = ""; 
function cmbCsvColumns_SelectedIndexChanged(obj) 
{ 
    if(selectedValues.indexOf(e.options[e.selectedIndex].value + ",") != -1) 
    { 
     alert("Your message"); 
    } 
    else 
     selectedValues = selectedValues + e.options[e.selectedIndex].value + ","; 

} 

Вы должны Повышать JavaScript методу немного, чтобы избежать проблем, как соответствия «1» в «11,»

Я использовал жерех: выпадающее меню в ретранслятора и на стороне сервера, вы можете это нравится получения идеальной:

protected void cmbCsvColumns_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string s = ((DropDownList)(sender)).ClientID; 

     for (int i = 0; i < rptTableMapper.Items.Count; i++) 
     { 
      DropDownList cmb = (DropDownList)(rptTableMapper.Items[i].FindControl("cmbCsvColumns")); 
      ListItem selectedItem = ((DropDownList)(sender)).SelectedItem; 
      if (cmb.ClientID != s) 
      { 
       foreach (ListItem li in cmb.Items) 
       { 
        if (li.Value == selectedItem.Value) 
        { 
         cmb.Items.Remove(li); 
         break; 
        } 
       } 
      } 
     } 

    } 

Дело в том, что если элемент, удаленный из раскрывающегося списка, не выбран, как добавить его обратно в другие выпадающие списки.

+0

Thank вы Imran, То, что я пытаюсь достичь, это SQL-> csv table mapper, который будет сопоставлять имена столбцов от SQL к их эквивалентным именам столбцов, присутствующим в заголовке CSV. Вы можете найти аналогичный пример запуска в SQL-сервере, Щелкните правой кнопкой мыши по базе данных в Management Studio и выберите данные импорта, выберите источник данных в качестве файла flatfile и выберите CSV и выберите существующее имя таблицы и щелкните по редактированию сопоставлений, посмотрите поведение ComboBoxes. Я считаю, что мы можем сделать это без JS. Любая дополнительная информация, чтобы помочь с этой Дилемой? –

+0

Я обновил свой ответ с помощью кода на стороне сервера, любезно посмотрите на него. –

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