通过下拉列表的SelectedIndexChanged事件从GridView中获取单元格的值

本文关键字:获取 单元格 GridView 事件 下拉列表 SelectedIndexChanged | 更新日期: 2023-09-27 18:07:10

我有一个GridView,有数据边界行。我试图在DropDownListSelectedIndexChanged事件上获得特定的单元格值。我的尝试如下:

string temp=  GridView2.SelectedRow.Cells[3].Text;
string temp = ((DataBoundLiteralControl)GridView2.Rows[0].Cells[3].Controls[0]).Text;
DataBoundLiteralControl dblc = (DataBoundLiteralControl)GridView2.Rows[0].Cells[3].Controls[0];
string temp=dblc.Text;

这三个都返回null

而且,控件[0]只返回TemplateFields的正确值,而不返回DataBound字段。

<asp:GridView ID="GridView1" runat="server" HeaderStyle-BackColor=" #d54d7b" HeaderStyle-ForeColor="White"
RowStyle-BackColor="#FFFAFC" AlternatingRowStyle-BackColor="#FFFFF7" AlternatingRowStyle-ForeColor="#000"
 AutoGenerateColumns="false" AllowPaging="true" OnPageIndexChanging="OnPageIndexChanging" Width="900px" Font-Names="Segoe UI Light"  BorderColor="#DEDEDE">
<RowStyle HorizontalAlign="center" />
<Columns>
    <asp:BoundField DataField="Description" HeaderText="Description" ItemStyle-Width="80"  />
    <asp:BoundField DataField="Vacancies" HeaderText="Vacancies" ItemStyle-Width="150" />
    <asp:TemplateField HeaderText="Detail">
     <ItemTemplate>
   <asp:BoundField DataField="Date" HeaderText="Date" ItemStyle-Width="80"  />
   <asp:BoundField DataField="Time" HeaderText="Time" ItemStyle-Width="80"  />
</Columns>

通过下拉列表的SelectedIndexChanged事件从GridView中获取单元格的值

你可能面临的问题是,GridView1还没有成为bounded…这就是为什么Control[0]返回TemplateFields的正确值,而gridview中的cells返回null的原因。您可以执行以下操作

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{ 
    /// send value to filter or bind gridView1
    /// bind gridvew
    string temp = GridView1.Rows[0].Cells[3].Text;
    /// or any code to get values from GridView Cell
}

我将所有的<asp:BoundFields>转换为<asp:TemplateField>,看起来像这样:

<asp:GridView ID="GridView1" runat="server" HeaderStyle-BackColor=" #009C0D" HeaderStyle-ForeColor="White"
    RowStyle-BackColor="#FFFAFC" AlternatingRowStyle-BackColor="#FFFFF7" AlternatingRowStyle-ForeColor="#000"
     AutoGenerateColumns="false" AllowPaging="true"  CssClass="test"
     HtmlEncode="true" 
        Font-Names="Segoe UI Light"  BorderColor="#DEDEDE" >
    <RowStyle HorizontalAlign="center" />
    <Columns>
        <asp:TemplateField HeaderText="Description" ControlStyle-Width="250px"  ><ItemTemplate> <asp:LinkButton  ID= "Description" PostBackUrl='<%# Eval("Description", "~/{0}.aspx") %>'    Text='<%# Eval("Description")%>'  runat="server" ></asp:LinkButton>   </ItemTemplate></asp:TemplateField>
         <asp:TemplateField HeaderText="Vacancies"><ItemTemplate>   <asp:Label ID="Vacancies"  Text='<%# Eval("Vacancies")%>' runat="server" ></asp:Label>   </ItemTemplate></asp:TemplateField>
        <asp:TemplateField HeaderText="Detail"><ItemTemplate><asp:Label ID="City"  Text='<%# Eval("City")%>' runat="server" ></asp:Label> <div style="font-size:10px"> <asp:Label ID="Label1"   Text='<%# Eval("DateDay")%>' runat="server" ></asp:Label> </div> </ItemTemplate></asp:TemplateField>
        //and others
    </Columns>
</asp:GridView>

并通过在DropDownList:

后面输入这段代码来获得特定的值
 if (dropdown.SelectedIndex != -1)
    {
        ListItem mySelectedItem = (from ListItem li in dropdown.Items where li.Selected == true select li).First();
        foreach (GridViewRow rw in GridView2.Rows)
        {
            Label tv = (Label)rw.Cells[3].FindControl("City");
            if (tv.Text.IndexOf(mySelectedItem.Text) != -1)
            {
                rw.Visible = true;
            }
            else
                rw.Visible = false;
        }
    }