我在标题中有一个带有下拉列表的gridview,用于选择应显示我的数据源的哪一列。
ASP:
<asp:GridView ID="gvProperties" runat="server" AutoGenerateColumns="False"
DataKeyNames="part_id" DataSourceID="edsPartProperties"
AllowSorting="True">
<Columns>
<asp:BoundField DataField="propertyname" HeaderText="propertyname"
SortExpression="propertyname" />
<asp:BoundField DataField="value_num" HeaderText="value_num"
SortExpression="value_num" />
<asp:BoundField DataField="value_char" HeaderText="value_char"
SortExpression="value_char" />
<asp:BoundField DataField="symbol" HeaderText="symbol"
SortExpression="symbol" />
<asp:TemplateField>
<HeaderTemplate>
<asp:DropDownList ID="ddlGvColumn" runat="server"
onselectedindexchanged="ddlGvColumn_SelectedIndexChanged"
AutoPostBack="true" onprerender="ddlGvColumn_PreRender">
<asp:ListItem>Value</asp:ListItem>
<asp:ListItem>Identifier</asp:ListItem>
</asp:DropDownList>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server"
Text='<%# Eval(((DropDownList)(this.gvProperties.HeaderRow.FindControl("ddlGvColumn"))).SelectedValue) %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
第一次加载时效果很好! 只要我从下拉列表中选择其他项目,gridview就会再次加载第一个项目。 所以我决定存储ViewState并在onprerender上重新设置下拉列表。所以现在下拉列表显示正确的选定项目,但itemtamplate中的标签不会绑定到它!
这里是2个事件的代码:
protected void ddlGvColumn_SelectedIndexChanged(object sender, EventArgs e) {
DropDownList ddlProps = (DropDownList)sender;
ViewState["selVal"] = ddlProps.SelectedValue;
}
protected void ddlGvColumn_PreRender(object sender, EventArgs e) {
DropDownList ddlProps = (DropDownList)sender;
foreach (ListItem li in ddlProps.Items) {
if (li.Value.Equals(ViewState["selVal"])) {
li.Selected = true;
return;
}
}
}
如何将列中的项绑定到标题中的选定值? e:在SelectedIndexChanged方法的gridview上触发数据绑定不起作用
答案 0 :(得分:0)
为什么不创建一个global variable
来保存您从下拉列表中选择的值。将global variable
的初始化放在SelectedIndexChanged
中。然后,您可以将global variable
的值放在条件中以设置下拉列表中的所选项目。您可以将此条件置于PreRender
事件中。