gridview中的boundfield中找不到值?

时间:2012-01-23 12:02:04

标签: c# asp.net gridview hiddenfield

我正在尝试为dropdownlist的indexchange事件中的hiddenfield赋值!实际上问题是当我试图更新我的记录时,我无法找到该隐藏字段的值!请给我解决方案或建议任何其他选择!谢谢!

我的网格视图是

<asp:TemplateField HeaderText="LocCode" SortExpression="LocCode">
   <EditItemTemplate>
       <ajax:UpdatePanel ID="upEditsLocation" runat="server" UpdateMode="Conditional">
           <ContentTemplate>
              <asp:DropDownList ID="ddlLocation" runat="server" 
                 DataSourceID="sdsLocation" 
                 OnDataBound="ddlLocation_DataBound"  
                 DataValueField="LocCode" AppendDataBoundItems="false" 
                 DataTextField="LocCode" 
                 AutoPostBack="true" 
                 onselectedindexchanged="ddlLocation_SelectedIndexChanged">
              </asp:DropDownList>
              <asp:SqlDataSource ID="sdsLocation" runat="server" ConnectionString="<%$ ConnectionStrings:ccConnString %>"
                 ProviderName="<%$ ConnectionStrings:CCConnString.ProviderName %>" SelectCommand="Select LocCode from Location">
              </asp:SqlDataSource>
           </ContentTemplate>
       </ajax:UpdatePanel>
   </EditItemTemplate>
   <ItemTemplate>
       <asp:Label ID="lblLocation" runat="server" Text='<%# Bind("LocCode") %>'>
       </asp:Label>
   </ItemTemplate>
</asp:TemplateField>

我的indexchange事件是

protected void  ddlLocation_SelectedIndexChanged(object sender, EventArgs e)
{
    hdloc.Value = ddlLocation.SelectedItem.Text;

}

我隐藏的领域是

<asp:HiddenField ID="hdloc" runat="server" />

3 个答案:

答案 0 :(得分:0)

从代码我可以看到HiddenField不是更新面板的一部分。因此,如果您为其分配任何值,它将不会反映在客户端计算机上。增加面板的范围以包含隐藏字段,然后尝试。

或者您可以尝试来自ASP.net论坛的this解决方案

Here is a small tutorial on update panel (MSDN)

希望这会对你有所帮助。

答案 1 :(得分:0)

GridViewRow cancel = (GridViewRow)GridView1.Rows[e.RowIndex];
Label lbldeleteID = (Label)cancel.FindControl("lblid");

答案 2 :(得分:0)

如果你无法从后面的代码访问hdloc,那么Visual Studio就不会在aspx.designer.cs上添加任何内容(尝试删除它并将其添加回来或更改id然后再返回原始值)或隐藏字段放在另一个绑定控件的其他模板中,这意味着你需要使用ctrl.FindControl(“hdloc”)然后转换为HiddenField。
此外,您需要将此隐藏字段放入UpdatePanel,并使用UpdateMode =“Always”。

protected void  ddlLocation_SelectedIndexChanged(object sender, EventArgs e)
{   
    hdloc.Value = (sender as DropDownList).SelectedItem.Text;
}

我确定ddlLocation.SelectedItem.Text,就像你使用它一样,它会产生编译错误,因为ddlLocation在后面的代码上是不可见的,因为它在EditItemTemplate里面。