GridView更新时遇到的问题
前面的代码
<asp:GridView ID="dvSmall" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1"
    Width="359px" OnRowDataBound="dvSmall_RowDataBound" DataKeyNames="Id" OnRowUpdating="dvSmall_RowUpdating">
    <Columns>
        <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" SortExpression="Id" />
        <asp:TemplateField HeaderText="小类名称" SortExpression="SmallClassName">
            <EditItemTemplate>
                <asp:TextBox ID="tbName" runat="server" Text='<%# Bind("SmallClassName") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("SmallClassName") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="所属类别" SortExpression="BgClass">
            <EditItemTemplate>
                <asp:DropDownList ID="ddlBg" runat="server" DataSourceID="ObjectDataSource1"
                    DataTextField="BgClassName" DataValueField="Id">
                </asp:DropDownList>&nbsp;
                <asp:HiddenField ID="hfBg" runat="server" Value='<%# Eval("BgClass.Id") %>' />
                &nbsp;
                <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAllBgClasses"
                    TypeName="BfCMS.BLL.BgClassManager"></asp:ObjectDataSource>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server" Text='<%# Eval("BgClass.BgClassName") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ShowEditButton="True" />
    </Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAllSmallClasses"
    TypeName="BfCMS.BLL.SmallClassManager" UpdateMethod="ModifySmallClass">
    <UpdateParameters>
        <asp:Parameter Name="Id" Type="Int32" />
        <asp:Parameter Name="BgClassId" Type="Int32" />
        <asp:Parameter  Name="SmallClassName" Type="String" />
    </UpdateParameters>
</asp:ObjectDataSource>
后面的代码
    protected void dvSmall_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowState == DataControlRowState.Edit)
        {
            DropDownList ddlBg = (DropDownList)e.Row.FindControl("ddlBg") as DropDownList;
            HiddenField hfBg = (HiddenField)e.Row.FindControl("hfBg") as HiddenField;
            ddlBg.SelectedValue = hfBg.Value.Trim(); 
        }    }
    protected void dvSmall_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = dvSmall.Rows[dvSmall.EditIndex];        DropDownList ddlBg = (DropDownList)row.FindControl("ddlBg") as DropDownList;        e.NewValues["BgClassId"] = ddlBg.SelectedValue;    }问题是
有的一行当点编辑后所属类别是正确的,有的则不正确,也就是有的保持了原来的属性,而有的则没有

解决方案 »

  1.   

     protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e) 
            { 
                gv.EditIndex = e.RowIndex; 
           string str= ((TextBox)gv.Rows[e.RowIndex].FindControl("TextBox1")).Text.Trim(); DropDownList ddlBg = (DropDownList)gv.Rows[e.RowIndex].FindControl("ddlBg") as DropDownList;
              } 
      

  2.   

    如果是手写代码进行数据绑定,请检查Page_Load事件中绑定GridView时是否加了if(!IsPostBack)的判断