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>
<asp:HiddenField ID="hfBg" runat="server" Value='<%# Eval("BgClass.Id") %>' />
<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; }问题是
有的一行当点编辑后所属类别是正确的,有的则不正确,也就是有的保持了原来的属性,而有的则没有
前面的代码
<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>
<asp:HiddenField ID="hfBg" runat="server" Value='<%# Eval("BgClass.Id") %>' />
<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; }问题是
有的一行当点编辑后所属类别是正确的,有的则不正确,也就是有的保持了原来的属性,而有的则没有
{
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;
}