我有一个GridView控件,我希望有2个可见字段,一个标签和一个下拉列表。我没有使用RowEditTemplate,而是希望将ItemTemplate定义为下拉值。
如果下拉列表发生更改,我想执行一些代码,我可以获取该gridview行的整数键以及下拉列表的新选定值。如下所示:
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"
DataKeyNames="pk_id" onrowdeleting="GridView2_RowDeleting"
onrowcommand="GridView2_RowCommand">
<Columns>
<asp:BoundField DataField="pk_id" Visible="False" />
<asp:BoundField DataField="Column1" HeaderText="Column1" />
<asp:TemplateField HeaderText="Column2">
<ItemTemplate>
<asp:DropDownList ID="DropDownList3" runat="server"
DataSourceID="SqlDataSource" DataTextField="name"
DataValueField="id2"
SelectedValue='<%# Bind("id2") %>'
AutoPostBack="True">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:Main %>"
SelectCommand="get_TestData" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowDeleteButton="True" />
</Columns>
</asp:GridView>
代码背后
protected void Page_Load(object sender, EventArgs e)
{
...
GridView2.DataSource = new Person(id).GetDataSet();
GridView2.DataBind();
}
protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
// Call delete function with the key
// Delete(key);
}
protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
{
// figure out which row sent it
// UpdateRecord(key, newvalue)
}
填充下拉列表并正确选择值,但我无法通过下拉列表进行删除或更新以使其正常工作。我尝试过实现这些函数,但是当下拉列表触发回发时,RowCommand似乎没有触发。即使它确实触发,我也不确定如何获得我需要的值。我有更好的办法吗?
答案 0 :(得分:1)
我注意到你的代码中有一件事你在页面加载时调用了GridView2.DataBind()....尝试将它放在Page Prerender中,因为当一个事件被触发时它会调用页面加载,你的gridview将在之前刷新事件被处理....
然而,它并不总是导致问题
答案 1 :(得分:0)
尝试将此代码放入页面加载
protected void Page_Load(object sender, EventArgs e)
{
if(!isPostback)
{
GridView2.DataSource = new Person(id).GetDataSet();
GridView2.DataBind();
}
}
这将解决您的问题