2016-02-12 6 views
0

У меня этот код:DropDown связывание в GridView

<asp:TemplateField HeaderText="Gestisci IP" SortExpression="GestisciIp"> 
    <EditItemTemplate> 
     <asp:DropDownList ID="ddlGestisciIP" runat="server" AppendDataBoundItems="true" 
      DataSourceID="SqlDataSource3" DataTextField="GestisciIP" 
      DataValueField="GestisciIP" SelectedValue='<%# Bind("GestisciIP") %>'> 
      <asp:ListItem Text="True" Value="True" /> 
      <asp:ListItem Text="False" Value="False" /> 
     </asp:DropDownList> 
    </EditItemTemplate> 
    <ItemTemplate> 
     <asp:Label ID="Label2" runat="server" Text='<%# Bind("GestisciIp") %>'></asp:Label> 
    </ItemTemplate> 
</asp:TemplateField> 

Источник данных содержит значение поля, выбранного на текущего пользователя (идентификатор пользователя), и это может быть истинным или ложным. Моя проблема в том, что Я хочу, чтобы выпадающее меню всегда показывало 2 варианта True и False, но также должно иметь выбранное значение, полученное из источника данных.

Если удалить 2 строки

<asp:ListItem Text="True" Value="True" /> 
<asp:ListItem Text="False" Value="False" /> 

это только показывает значение получили из БД, если я оставлю эти строки это показывает, 3 величины: один получил из БД и True, False добавленным этим код. Итак, как я могу это сделать? Я надеюсь, что было достаточно ясно, благодаря


ЭТО СДЕЛАНО! Еще раз спасибо

ASPX

 <asp:TemplateField HeaderText="Gestisci IP" SortExpression="GestisciIp"> 
        <EditItemTemplate> 
        <asp:DropDownList ID="ddlGestisciIP" runat="server"> 

        </asp:DropDownList> 
        <asp:ListItem Text="True" Value="True" /> 
          <asp:ListItem Text="False" Value="False" /> 
         </asp:DropDownList>--%> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:Label ID="Label2" runat="server" Text='<%# Bind("GestisciIp") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 

КОД ЗА

Private Sub GridView2_RowCommand(sender As Object, e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView2.RowCommand 
    If e.CommandName = "Edit" Then 
     Dim gvRow As GridViewRow = DirectCast(DirectCast(e.CommandSource, LinkButton).NamingContainer, GridViewRow) 

     Dim lbl As Label = DirectCast(gvRow.FindControl("Label2"), Label) 

     ViewState("LabelValue") = lbl.Text 
    End If 

End Sub 

Private Sub GridView2_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView2.RowDataBound 
    If e.Row.RowType = DataControlRowType.DataRow AndAlso GridView2.EditIndex = e.Row.RowIndex Then 
     Dim ddlGestisciIP As DropDownList = DirectCast(e.Row.FindControl("ddlGestisciIP"), DropDownList) 
     Dim LblddlGestisciIP As Label = DirectCast(e.Row.FindControl("LblddlGestisciIP"), Label) 
     ddlGestisciIP.Items.Add(New ListItem("True", "1")) 
     ddlGestisciIP.Items.Add(New ListItem("False", "0")) 
     If Convert.ToString(ViewState("LabelValue")) <> "" Then 

      ddlGestisciIP.SelectedValue = ddlGestisciIP.Items.FindByText(Convert.ToString(ViewState("LabelValue"))).Value 
     End If 
    End If 


End Sub 

Private Sub GridView2_RowUpdating(sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView2.RowUpdating 
    Dim ddlGestisciIP As DropDownList = DirectCast(GridView2.Rows(GridView2.EditIndex).FindControl("ddlGestisciIP"), DropDownList) 

    SqlDataSourceUtenti.UpdateCommand = "UPDATE [Utenti] SET [RfProfilo] = @RfProfilo, [Nome] = @Nome, [Cognome] = @Cognome, [Username] = @Username, [Password] = @Password, [Badge] = @Badge, [IpCorretto] = @IpCorretto, [GestisciIp] = " & ddlGestisciIP.SelectedValue & " WHERE [IdUtente] = @Original_IdUtente" 

End Sub 
+0

Что это выглядит как? 'SqlDataSource3' –

+0

SELECT [GestisciIP] FROM [Utenti] WHERE ([IdUtente] = @IdUtente) в основном он получает логическое значение из db –

+0

у вас есть ответ? –

ответ

1

попробуйте это, добавьте событие Onrowdatabound в gridview и привяжите свой раскрывающийся список в этом случае.

<asp:GridView ID="GridView2" runat="server" AllowPaging="True" CellPadding="4" DataSourceID="SqlDataSourceUtenti" 
       ForeColor="#333333" GridLines="None" AutoGenerateColumns="False" 
       DataKeyNames="IdUtente" BorderColor="#E1E1E1" BorderStyle="Solid" 
       BorderWidth="3px" OnRowDataBound="GridView2_RowDataBound" OnRowCommand="GridView2_RowCommand" OnRowUpdating="GridView2_RowUpdating" > 
       <AlternatingRowStyle BackColor="White" /> 
       <Columns> 
        <asp:BoundField DataField="RfProfilo" HeaderText="RfProfilo" 
         SortExpression="RfProfilo" Visible="False" /> 

        <asp:BoundField DataField="Nome" HeaderText="Nome" SortExpression="Nome" /> 

        <asp:BoundField DataField="Cognome" HeaderText="Cognome" 
         SortExpression="Cognome" /> 

        <asp:BoundField DataField="Username" HeaderText="Username" 
         SortExpression="Username" /> 

        <asp:TemplateField HeaderText="Profilo" SortExpression="Profilo"> 
         <EditItemTemplate> 
          <asp:DropDownList ID="DropDownList1" runat="server" 
           DataSourceID="SqlDataSource2" DataTextField="Nome" DataValueField="idProfilo" 
           SelectedValue='<%# Bind("RfProfilo") %>'> 
          </asp:DropDownList> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label1" runat="server" Text='<%# Bind("NomeProfilo") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 

        <asp:TemplateField HeaderText="Password" SortExpression="Password"> 
         <EditItemTemplate> 
          <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Password") %>'></asp:TextBox> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label3" runat="server" Text='<%# mascheraPassword(Eval("Password").ToString()) %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 


        <asp:BoundField DataField="Badge" HeaderText="Badge" SortExpression="Badge" /> 

        <asp:TemplateField HeaderText="IP di origine" SortExpression="IpCorretto"> 
         <EditItemTemplate> 
          <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("IpCorretto") %>'></asp:TextBox> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="lblIpCorretto" maxlength="16" runat="server" Text='<%# limitaCaratteri(Eval("IpCorretto").ToString()) %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 




        <asp:TemplateField HeaderText="Gestisci IP" SortExpression="GestisciIp"> 
         <EditItemTemplate> 
         <asp:DropDownList ID="ddlGestisciIP" runat="server"> 

         </asp:DropDownList> 

         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:Label ID="Label2" runat="server" Text='<%# Bind("GestisciIp") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 




        <asp:TemplateField ShowHeader="False"> 
         <EditItemTemplate> 
          <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" 
           CommandName="Update" Text="Aggiorna" ForeColor="White"></asp:LinkButton> 
          &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
           CommandName="Cancel" Text="Annulla" ForeColor="White"></asp:LinkButton> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" 
           CommandName="Edit" Text="Modifica"></asp:LinkButton> 
          &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
           CommandName="Delete" Text="Elimina"></asp:LinkButton> 

         </ItemTemplate> 
        </asp:TemplateField> 



       </Columns> 
       <EditRowStyle BackColor="#2461BF" /> 
       <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
       <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
       <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
       <RowStyle BackColor="#EFF3FB" /> 
       <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
       <SortedAscendingCellStyle BackColor="#F5F7FB" /> 
       <SortedAscendingHeaderStyle BackColor="#6D95E1" /> 
       <SortedDescendingCellStyle BackColor="#E9EBEF" /> 
       <SortedDescendingHeaderStyle BackColor="#4870BE" /> 
      </asp:GridView> 

в код

Protected Sub GridView2_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) 
     If e.CommandName = "Edit" Then 
      Dim gvRow As GridViewRow = DirectCast(DirectCast(e.CommandSource, LinkButton).NamingContainer, GridViewRow) 

      Dim lbl As Label = DirectCast(gvRow.FindControl("Label2"), Label) 

      ViewState("LabelValue") = lbl.Text 
     End If 

    End Sub 



    Private Sub GridView2_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView2.RowDataBound 
     If e.Row.RowType = DataControlRowType.DataRow AndAlso GridView2.EditIndex = e.Row.RowIndex Then 
      Dim ddlGestisciIP As DropDownList = DirectCast(e.Row.FindControl("ddlGestisciIP"), DropDownList) 

      ddlGestisciIP.Items.Add(New ListItem("True", "1")) 
      ddlGestisciIP.Items.Add(New ListItem("False", "0")) 
      If Convert.ToString(ViewState("LabelValue")) <> "" Then 

       ddlGestisciIP.SelectedValue = ddlGestisciIP.Items.FindByText(Convert.ToString(ViewState("LabelValue"))).Value 
      End If 
     End If 



    End Sub 

Во-первых, с использованием RowCommand события в табличном виде, получить значение редактируемого Добавьте в ViewState, а затем использовать ViewState и обрабатывать ваши RowDataBound

и upadate ваших данных, которые вы можете использовать roeupdate события, как следует

protected void Gridview2_RowUpdating(Object sender, GridViewUpdateEventArgs e) 
    { 
//add code for updating values in database 
} 
+0

Я преобразовал его в VB и получил ошибку Null Reference Exception на ddlGestisciIP.Items.Insert (1, li2), говорящий, чтобы использовать New для создания экземпляра объекта. –

+0

Хорошо, проблема в том, что строки в datagrid редактируются, поэтому при загрузке страницы отображается метка со значением, полученным из db (label2), при нажатии Edit Edit метка превращается в раскрывающийся список (ddlGestisciIP). Поэтому я добавил IF, чтобы проверить, не является ли контроль. Теперь у меня есть еще одна проблема: как передать значение label2 при переходе в режим редактирования?Я должен это сделать: прочитать значение метки и сохранить его, затем, если вы перейдете в режим редактирования, используйте его, чтобы заполнить раскрывающийся список. Но label2 больше не существует на странице при входе в режим редактирования ... –

+0

Я отредактировал вопрос, чтобы включить прогресс, можете ли вы помочь мне на последнем этапе? :-D –

0

Если я понял правильно, вы только хотите, чтобы значения ИСТИНА и ЛОЖЬ, таким образом, вы не нужен источник данных для этого ...

Удалить t его свойства DataSourceID, DataTextField, DataValueField и SelectedValue ...

Попробуйте пожалуйста.

+0

Нет, я хочу, чтобы он отображал True и False, но он должен отображать выбранное значение, полученное из базы данных. –

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