我有一个gridview,它有一个作者列。我想将作者姓名显示为超链接,因此当用户点击它时,他会被重定向到作者页面。但是当用户希望编辑当前产品的作者时,他应该看到一个下拉列表。我正在尝试使用模板字段来实现它:
<asp:TemplateField HeaderText="автор">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateURL='<%# "~/CMS/AuthorPage.aspx?a="+ Eval("AuthorID")%>' Text='<%#Eval("AuthorID")%>' />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource3"
DataTextField="Name" DataValueField="ID"/>
<asp:SqlDataSource ID="SqlDataSource3" runat="server"
ConnectionString="<%$ ConnectionStrings:aspnetdbConnectionString1 %>"
SelectCommand="SELECT [ID], [Name] FROM [Authors] ORDER BY [Name]"></asp:SqlDataSource>
</EditItemTemplate>
</asp:TemplateField>
但是如何指定所选值,以及如何在编辑后存储所选值?
答案 0 :(得分:2)
您需要在RowDataBound
GridView
事件中执行此操作,然后在RowUpdating
事件中您可以获得所选值
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
DropDownList DropDownList1 = (DropDownList)e.Row.FindControl("DropDownList1");
DropDownList1.SelectedValue = "SomeID";
}
并通过
获取所选值protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
DropDownList DropDownList1 = (DropDownList)this.GridView1.Rows[e.RowIndex].FindControl("DropDownList1");
string value = DropDownList1.SelectedValue;
}