gridview选择一行进行更新,中间没有报错,但数据却没有被更新.
实在找不出原因,只好将绑定列全部改成了模板列,然后在RowUpdating事件中给参数赋值.相应的textbox中已经写入的新的值,但findcontrol时得到的仍然是原来绑定的值,
郁闷死了,向高手救助
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Width="800px" BorderStyle="Solid" BorderWidth="1px" DataSourceID="SqlDataSource1" DataKeyNames="ID" AllowSorting="True" OnRowUpdated="GridView1_RowUpdated" OnRowUpdating="GridView1_RowUpdating">
                        <Columns>      
                            <asp:TemplateField HeaderText="Result">
                                <ItemTemplate><asp:Label runat="server" ID="lbl" Text='<%#Bind("Result")%>'></asp:Label></ItemTemplate>
                                <EditItemTemplate>
                                    <asp:DropDownList ID="dropResultEidt" runat="server">
                                    <asp:ListItem Text="Pass"></asp:ListItem>
                                    <asp:ListItem Text="Fail"></asp:ListItem>
                                    </asp:DropDownList>
                                </EditItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Re" SortExpression="Re">
                                <ItemTemplate>
                                    <asp:Label ID="Label3" runat="server" Text='<%#Bind("Re")%>' />
                                </ItemTemplate>
                                <EditItemTemplate>
                                    <asp:TextBox ID="txtEditRe"  Width="100px" runat="server" Text='<%#Bind("Re")%>' />
                                </EditItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Location" SortExpression="Location">
                                <ItemTemplate>
                                    <asp:Label ID="Label3" runat="server" Text='<%#Bind("Location")%>' />
                                </ItemTemplate>
                                <EditItemTemplate>
                                    <asp:TextBox ID="txtEditLocation" Width="100px" runat="server" Text='<%#Bind("Location")%>' />
                                </EditItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="DateCode" SortExpression="DateCode">
                                <ItemTemplate>
                                    <asp:Label ID="Label3" runat="server" Text='<%#Bind("DateCode")%>' />
                                </ItemTemplate>
                                <EditItemTemplate>
                                    <asp:TextBox ID="txtEditDateCode" Width="100px" runat="server" Text='<%#Bind("DateCode")%>' />
                                </EditItemTemplate>
                            </asp:TemplateField> 
                            <asp:BoundField DataField="InputTime" DataFormatString="{0:yy-MM-dd HH:mm:ss}"
                                HeaderText="Input Time" SortExpression="InputTime" HtmlEncode="False" ReadOnly="True" />
                            
                            <asp:CommandField ShowEditButton="true" ShowDeleteButton="true" />
                        </Columns>
                    </asp:GridView>
//datasouce
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TPMConnectionString %>"
            DeleteCommand="sp_Delete_Repair_Info" DeleteCommandType="StoredProcedure" SelectCommand="SELECT * FROM [tb_Repair_Info]"
            UpdateCommand="sp_Update_Repair_Info" UpdateCommandType="StoredProcedure" on>
            <DeleteParameters>
                <asp:ControlParameter ControlID="GridView1" Name="ID" PropertyName="SelectedDataKey"
                    Type="Int32" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="ID" Type="Int32" />
                <asp:Parameter Name="Result" Type="String" />
                <asp:Parameter Name="Re" Type="String" />
                <asp:Parameter Name="Location" Type="String" />
                <asp:Parameter Name="DateCode" Type="String" />
            </UpdateParameters>
        </asp:SqlDataSource>//updating事件
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow r = GridView1.Rows[e.RowIndex];
        SqlDataSource1.UpdateParameters["ID"].DefaultValue = e.Keys[0].ToString();
        SqlDataSource1.UpdateParameters["Result"].DefaultValue = ((DropDownList)r.FindControl("dropResult")).Text.Trim();
        SqlDataSource1.UpdateParameters["Re"].DefaultValue = ((TextBox)GridView1.SelectedRow.FindControl("txtEditRe")).Text.Trim();
        SqlDataSource1.UpdateParameters["Location"].DefaultValue = ((TextBox)r.FindControl("txtEditLocation")).Text.Trim();
        SqlDataSource1.UpdateParameters["DateCode"].DefaultValue = ((TextBox)r.FindControl("txtEditDateCode")).Text.Trim();
        
    }

解决方案 »

  1.   

    既然你使用 xxxDataSource ,应该不存在 !IsPostBack  的问题,他会自动维护比较奇怪
      

  2.   

    在 RowUpdated 事件中,检查下 AffectedRows ,看是否真的执行了更新
    protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
        {
            Response.Write( e.AffectedRows );
        }
      

  3.   

    回复楼上的:执行了!
    每次执行都是成功的,但传入参数都是原来的,而不是我重新输入的.
    比如txtEditRe原始的值是aaa,我将其改为bbb,但单步执行到
    SqlDataSource1.UpdateParameters["Re"].DefaultValue = ((TextBox)r.FindControl("txtEditRe")).Text.Trim();
    发现行到的txtEditRe的值还是aaa.
    所以更新了之后和没更新是一样的.