2012-08-14 95 views
1

我想用一個下拉列表上一個GridView ......我從asp.net下面的代碼在GridView Asp.Net中使用Dropdownlist?

<asp:GridView ID="grdvEventosVendedor" runat="server" AllowPaging="True" 
       AutoGenerateColumns="False" CellPadding="4" DatakeyNames="idCita" 
       EmptyDataText="No Hay Eventos Para Este Vendedor" ForeColor="#333333" 
       GridLines="None" AllowSorting="True" 
       onpageindexchanging="grdvEventosVendedor_PageIndexChanging" 
       onrowcommand="grdvEventosVendedor_RowCommand" 
       onsorting="grdvEventosVendedor_Sorting" CellSpacing="1" HorizontalAlign="Center"> 
       <AlternatingRowStyle BackColor="White" ForeColor="#284775"/> 

       <Columns> 
        <asp:TemplateField HeaderText="" ItemStyle-Width="35px"> 
         <ItemTemplate> 
          <asp:ImageButton ID="imgBtnEdicEvento" runat="server" 
           CommandArgument='<%# Eval("idCita")%>' CommandName="Edicion" 
           Height="32px" ImageUrl="~/img/pencil_32.png" Width="32px" /> 
         </ItemTemplate> 
        </asp:TemplateField> 

        <asp:TemplateField HeaderText="" ItemStyle-Width="35px"> 
         <ItemTemplate> 
          <asp:ImageButton ID="imgBtnDelete" runat="server" 
           CommandName="Borrar" 
           ImageUrl="~/img/1385_Disable_16x16_72.png" 
           onclientclick="return confirm('¿Desea eliminar el registro?');" 
           CommandArgument='<%# Eval("idCita")%>' /> 
         </ItemTemplate> 
        </asp:TemplateField> 

        <asp:BoundField DataField="Cliente" HeaderText="Cliente" InsertVisible="False" ReadOnly="True" SortExpression="Cliente" ItemStyle-Width="50px" /> 
        <asp:BoundField DataField="Empresa" HeaderText="Empresa" InsertVisible="False" ReadOnly="True" SortExpression="Empresa" ItemStyle-Width="50px"/> 
        <asp:BoundField DataField="Telefono" HeaderText="Telefono" InsertVisible="False" ReadOnly="True" SortExpression="Telefono" ItemStyle-Width="50px"/> 
        <asp:BoundField DataField="Nextel" HeaderText="Nextel" InsertVisible="False" ReadOnly="True" SortExpression="Nextel" ItemStyle-Width="50px"/> 
        <asp:BoundField DataField="Tipo" HeaderText="Tipo" InsertVisible="False" ReadOnly="True" SortExpression="Tipo" ItemStyle-Width="50px"/> 
        <asp:BoundField DataField="Descripcion" HeaderText="Descripcion" InsertVisible="False" ReadOnly="True" SortExpression="Descripcion" ItemStyle-Width="100px"/> 

        <asp:TemplateField HeaderText="Fecha" SortExpression="Fecha" ItemStyle-Width="50px"> 
         <ItemTemplate>            
          <%# DataBinder.Eval(Container.DataItem, "Fecha", "{0:dd/MM/yyyy}")%> 
         </ItemTemplate> 

         <EditItemTemplate>           
          <asp:TextBox ID="tbxFecha" runat="server" Text='<%#Bind("Fecha","{0:dd/MM/yyyy}") %>' ValidationGroup="gpEdicionAgenda"> 
          </asp:TextBox> 
         </EditItemTemplate> 
        </asp:TemplateField> 

        <asp:BoundField DataField="HoraInicio" HeaderText="Hora" InsertVisible="False" ReadOnly="True" SortExpression="HoraInicio" ItemStyle-Width="50px"/> 
        <asp:BoundField DataField="Lugar" HeaderText="Lugar" InsertVisible="False" ReadOnly="True" SortExpression="Lugar" ItemStyle-Width="50px"/> 

        <asp:TemplateField HeaderText="Estado" ItemStyle-Width="50px"> 
         <ItemTemplate> 
          <asp:DropDownList ID="dpdListEstatus" runat="server"> 
           <asp:ListItem>Pendiente</asp:ListItem> 
           <asp:ListItem>Atendido</asp:ListItem> 
          </asp:DropDownList> 
         </ItemTemplate> 
        </asp:TemplateField> 

        <asp:TemplateField HeaderText="CRM" ItemStyle-Width="25px"> 
         <ItemTemplate> 
          <asp:ImageButton ID="imgBtnCRM" runat="server" 
           CommandArgument='<%# Eval("IdCliente")%>' CommandName="CRM" 
           ImageUrl="~/img/activar.png" Width="16px" Height="16px" /> 
         </ItemTemplate> 
        </asp:TemplateField> 

        <asp:TemplateField HeaderText="VM" ItemStyle-Width="25px"> 
         <ItemTemplate> 
          <asp:ImageButton ID="imgBtnVerMas" runat="server" 
           CommandArgument='<%# Eval("IdCliente")%>' CommandName="VerMas" 
           ImageUrl="~/img/search.png" Width="16px" Height="16px" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 

       <EditRowStyle BackColor="#999999" Font-Size="Small" /> 
       <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
       <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" Font-Size="Larger" /> 
       <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
       <RowStyle BackColor="#F7F6F3" ForeColor="#333333" HorizontalAlign="Center" Font-Size="Small" /> 
       <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
       <SortedAscendingCellStyle BackColor="#E9E7E2" /> 
       <SortedAscendingHeaderStyle BackColor="#506C8C" /> 
       <SortedDescendingCellStyle BackColor="#FFFDF8" /> 
       <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> 
      </asp:GridView> 

在那裏說是我想要的DDL成爲部分的部分...

你可能也注意到,我用一共有4個按鍵進行編輯,刪除等... 不過我想這是另一個故事...

我想要它做的幾件事情...首先,你會注意到我有2個值的下拉列表...這是因爲我從查詢中獲得了一個數據源,而這些是2可能的值,這列可以得到...

所以#1應該是...我怎麼能作出這樣的DDL的選定值是一個我從查詢得到....

和#2我可以手動更改ddl的值,所以我希望它進行回發並用新值更新該特定行(我需要回發的原因是我可以觸發例如ddl ONSELECTEDINDEX CHANGED,因此可以使用cs文件創建一個新的查詢,更新行,然後再次刷新gridview)

我想所有這些可能與rowcommand有關,就像其他4個按鈕的工作方式。

我使用這個C#,所以這將是有益的,如果你能使用C#如果你方法包括CS文件幫我...

感謝

回答

4

您應該使用OnRowDatabound事件在GridView上。像:

<asp:GridView ID="grdvEventosVendedor" OnRowDatabound="grdvEventosVendedor_RowDataBound"> 
     <asp:TemplateField HeaderText="Estado" ItemStyle-Width="50px"> 
      <ItemTemplate> 
       <asp:DropDownList ID="dpdListEstatus" runat="server" OnSelectedIndexChanged="dpdListEstatus_SelectedIndexChanged" AutoPostBack="True"> 
        <asp:ListItem>Pendiente</asp:ListItem> 
        <asp:ListItem>Atendido</asp:ListItem> 
       </asp:DropDownList> 
      </ItemTemplate> 
     </asp:TemplateField> 
</asp:GridView> 

然後在.cs後端代碼中,您應該找到控件並根據數據項值設置它的選定值。

protected void grdvEventosVendedor_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DropDownList dpdListEstatus = e.Row.FindControl("dpdListEstatus") as DropDownList; 
     dpdListEstatus.SelectedValue = DataBinder.Eval(e.Row.DataItem, "FieldName").ToString(); 
    } 
} 


protected void dpdListEstatus_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    //your logic goes here 
} 

您可以在ASPX代碼的下拉菜單設置的SelectedIndexChanged並在這片後端代碼,你可以繼續你的邏輯。 噢,不要忘記在你的下拉菜單中設置autopostback = true。

0
This is what I did that worked for me: 

**Snippet from aspx:** 

    <asp:TemplateField HeaderText="RECORD_STATUS" SortExpression="RECORD_STATUS"> 
    <EditItemTemplate> 
     <asp:DropDownList runat="server" ID="ddlRecStatus"            SelectedIndex='<%# GetselectedRecStatus(Eval("RECORD_STATUS")) %>' 
            DataSource = '<%# Recs_Status %>' /> 
          </EditItemTemplate> 
    </asp:TemplateField> 

**Snippet from code-behind:** 

protected void grdSAEdit_RowUpdating(object sender, GridViewUpdateEventArgs e) 
     { 
      //Get the refernce to the list control 
      DropDownList ddlRecStatus = (DropDownList)(grdSAEdit.Rows[e.RowIndex].FindControl("ddlRecStatus")); 

      // Add it to the parameters 
      e.NewValues.Add("RECORD_STATUS", ddlRecStatus.Text); 

     } 

     protected string[] Recs_Status 
     { 
      get { return new string[] { "A", "E", "V", "Z" }; } 
     } 

     protected int GetselectedRecStatus(object status) 
     { 
      return Array.IndexOf(Recs_Status, status.ToString()); 
     } 
相關問題