2015-11-20 2 views
3

Я пытаюсь установить флажки в определенных строках gridview, основанных на выделении из выпадающего списка. У меня есть gridview, где первый столбец - это флажок (cb_pain), а второй столбец - ID (DrugID). Пользователь делает выбор из выпадающего списка, он запускает хранимую процедуру. Хранимая процедура возвращает все идентификационные данные, которые необходимо проверить. Я могу вытащить DrugID из таких данных: dt.Rows (0) («pain1»). ToString() Это говорит мне DrugID для строки, которая должна быть проверена.Проверьте флажки в gridview на основе небулевого значения из хранимой процедуры

В основном я хотел бы проверить флажок на строке, где DrugID = dt.Rows (0) («pain1»). ToString()

Я думаю, что это должно быть сделано на selectedindexchange из выпадающего списка ,

Мой GridView выглядит следующим образом: (извините за точечными, я не мог понять, как закладка)

cb_pain ........ DrugID .......... ..... Поле1
x ................. 3 ................... другие данные
x ................. 23 ................. другие данные
x ......... ........ 24 ................. другие данные
x ................. 37. ................ другие данные

Как я могу se, чтобы установить флажок в строке, которая имеет правильную формулу?

Я пробовал пару различных вещей DirectCast, но не имел успеха. Может кто-то указать мне верное направление?

Благодаря

+0

Возможно, если вы разместите свой код «aspx file AND code behind», я смогу сделать это через минуту. –

+0

@glitzsfa - Также не забывайте отмечать ответ как принятый, и когда вы получаете достаточную репутацию, повысьте ответы, которые помогли решить вашу проблему. Добро пожаловать в переполнение стека! –

+0

Спасибо, сделаю! Спасибо за помощь. – glitzsfa

ответ

2

Еще один вариант, который я предпочитаю использовать, - это использование события GridView RowDataBound. Поскольку каждая строка получает привязанные к ней данные, это событие вызывается. Что бы вы сделали, это найти элемент управления DrugID и проверить его значение. Если это то, что вы хотите, сделайте что-нибудь.

Во-первых, пусть ваш GridView знает об этом событии.

<asp:GridView ID="gvDrugs" runat="server" OnRowDataBound="gvDrugs_RowDataBound"> 
</asp:GridView> 

Затем обработайте событие. Если DrugID - 23, найдите CheckBox и проверьте его.

Protected Sub gvDrugs_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) 
    If e.Row.RowType = DataControlRowType.DataRow Then  
     Dim lblDrugID As Label = e.Row.FindControl("lblDrugID") 
     If lblDrugID.Text = "23" Then 
      Dim cbPain As CheckBox = e.Row.FindControl("cbPain") 
      cbPain.Checked = True 
     End If 
    End If 
End Sub 

** Обратите внимание, что я предполагаю, что типы элементов управления являются метками и флажками.Вы не указали свою разметку, так что это лучшее, что я могу сделать.

После вашего редактирования я, вероятно, согласен с вами. Это можно сделать в событии SelectedIndexChanged DropDownList. Получите список DrugIDs, который необходимо проверить и выполнить итерацию каждой строки вашего GridView, проверив те, которые соответствуют.

Protected Sub dropdown_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 

    Dim uniqueDrugIDs As HashSet(Of String) = New HashSet(Of String)() 

    ' Here we assume dt is some sort of global variable as your question above implies 
    For Each dr As DataRow In dt.Rows 
     uniqueDrugIDs.Add(dr("drugID").ToString()) 
    Next 

    For Each gvRow As GridViewRow In gvDrugs.Rows 
     Dim lblDrugID As Label = gvRow.FindControl("lblDrugID") 
     If (uniqueDrugIDs.contains(lblDrugID.Text)) Then 
      Dim cbPain As CheckBox = gvRow.FindControl("cbPain") 
      cbPain.Checked = True 
     End If 
    Next 

End Sub 
+0

Мне нравится, что вы здесь сделали. Вы были правы в своих предположениях относительно меток и флажков. Моя сетка уже загружена и привязана к базе данных к моменту выбора пользователем из раскрывающегося списка. Мне нужно, вероятно, запустить это после выбранного index в выпадающем списке. Как я могу изменить свой код, чтобы проверить правильные поля после изменения выпадающего списка? – glitzsfa

+0

Трудно сказать без дополнительной информации. Если вы можете добавить то, что вам действительно нужно в вопросе, это поможет. Например, что делает выпадающий список? Изменяет ли источник данных? Изменяет ли это условие для отмеченных флажков? и т. д. –

+0

Хороший вопрос ... Я отредактировал свой вопрос, чтобы дать более подробную информацию. – glitzsfa

1

Вы можете пойти на такой цикл, который будет проходить через все ваши строки:

for (int x = 0; x < NameOfYourGrid.Rows.Count; x++) 
{ 

    GridViewRow row = (GridViewRow)NameOfYourGrid.Rows[x]; 

    if(row("pain1").ToString() == "23") 
     CheckBox chk = (CheckBox)row.Cells[0].FindControl("The_Name_Of_The_Control"); 

} 

Или, если вы Wich сделать это на связывании;

В файле .aspx поместить явное свойство на вашем флажком:

<asp:CheckBox ID="chkInside" runat="server" Checked='<%# CheckForChecked(Container.DataItem as Whatever_the_object_is) %>' ></asp:CheckBox> 

И связывает это событие в коде позади:

protected bool CheckForChecked(Whatever_the_object_is OBJ) 
    { 
     try 
     { 
      return (bool) OBJ.Boolean_value; 
      // here you are supposed to have a compete Object 
      // OBJ.ID is suposed to be the rigth id 
     } 
     catch 
     { 
      return false; 
     } 
    } 

Тогда CheckBox будет проверяться, если значение верно при привязке к gridview. Вам не потребуется идентификатор, если ваша привязка выполнена правильно.

+0

Как связать значение DrugID с базой данных, возвращаемой в DrugID в сетке? – glitzsfa

+0

Вы использовали правильное связывание? Я собираюсь отредактировать свой ответ –

+0

Хо, подожди, это не так, я touhgt –

0

Я принял ответ j-f и заставил его работать, когда место в нужном месте. В конце заполнения набора данных я добавил этот код:

Dim row As GridViewRow 
    For Each row In gv_pain.Rows 

     If row.RowType = DataControlRowType.DataRow Then 
      Dim lblDrugID As Label = row.FindControl("lbl_DrugID") 
      If lblDrugID.Text = dt.Rows(0)("pain1").ToString() Then 
       Dim cbPain As CheckBox = row.FindControl("CheckBoxPain") 
       cbPain.Checked = True 
      End If 
     End If 
    Next 

Это проходит через мои строки и проверяет правильность.

+0

Как вы знаете, это только проверяет «pain1» первой строки вашего datatable. Если у вас есть несколько «pain1», которые необходимо проверить или что-то еще, это будет работать неправильно. –