我有一个简单的gridview,其中一列名为“State”,而DropDownList在其标题中设置过滤器:
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
Please Login
</AnonymousTemplate>
<LoggedInTemplate>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" DataKeyNames="AssetsID" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:BoundField DataField="AssetsID" HeaderText="AssetsID" SortExpression="AssetsID" />
<asp:TemplateField HeaderText="State" SortExpression="State">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("State") %>'></asp:TextBox>
</EditItemTemplate>
<HeaderTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
<asp:ListItem Selected="True">State</asp:ListItem>
<asp:ListItem>Not used</asp:ListItem>
<asp:ListItem>Using</asp:ListItem>
</asp:DropDownList>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("State") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Gzone %>" OnSelecting="SqlDataSource1_Selecting" SelectCommand="DisplayAssets2" SelectCommandType="StoredProcedure" >
<SelectParameters>
<asp:Parameter Name="UserID" Type="String" />
<asp:Parameter Name="State" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
</LoggedInTemplate>
</asp:LoginView>
并在代码后面:
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
e.Command.Parameters["@UserID"].Value = this.User.Identity.Name;
GridView g = (GridView)LoginView1.FindControl("GridView1");
DropDownList d = (DropDownList)g.HeaderRow.FindControl("DropDownList1");
string s = d.SelectedValue;
e.Command.Parameters["@State"].Value = s;
}
但我不明白为什么我不能用这段代码访问DropDownList1,它的值为null。
由于 稻谷