1

グリッドビューの更新時に問題が発生しています! すべてが機能しているようです。しかし、編集を終了してもデータは保存されません!

しかし、正しいフィールドの編集をクリックすると、新しい値を入力するように求められますが、保存されません!

ここに私のASPがあります

<asp:GridView ID="GridView1" runat="server" CssClass="report" 
    AutoGenerateColumns="False" onrowediting="GridView1_RowEditing" 
    DataKeyNames="TimeID" onrowupdating="GridView1_RowUpdating" 
    onrowcommand="GridView1_RowCommand" 
    onrowcancelingedit="GridView1_RowCancelingEdit">

    <Columns> 



        <asp:BoundField DataField="date" Visible="true" ReadOnly="true" HeaderText="Date" />
        <asp:BoundField DataField="Description" HeaderText="Stage Description" ReadOnly="True" />


       <asp:TemplateField HeaderText="Start Time">
            <ItemTemplate>
                <asp:Label ID="Label7" runat="server"  Text='<%# ConvertToShotTime(Eval("StartTime")) %>'></asp:Label>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="txtStartTime" ValidationGroup="1" Width="90px"  class="TimeEntry" runat="server"  Text='<%# ConvertToShotTime(Eval("StartTime")) %>'></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator6" ControlToValidate="txtStartTime" runat="server" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
           </EditItemTemplate>
        </asp:TemplateField>




        <asp:TemplateField HeaderText="End Time">
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server"  Text='<%# ConvertToShotTime(Eval("EndTime")) %>'></asp:Label>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="txtEndTime" class="TimeEntry"  ValidationGroup="1" Width="90px" runat="server"  Text='<%# ConvertToShotTime(Eval("EndTime")) %>'></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator66" ControlToValidate="txtEndTime" runat="server" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
            </EditItemTemplate>
        </asp:TemplateField>



        <asp:BoundField DataField="TimeInHours" HeaderText="Time Time (Hours)" ReadOnly="True" />

        <asp:CommandField ShowEditButton="true" ShowCancelButton="true" 
            ButtonType="Image" EditImageUrl="~/images/edit_record.jpg" 
            CancelImageUrl="~/images/edit_no.jpg" 
            UpdateImageUrl="~/images/update_record.jpg" />

        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
              <asp:ImageButton ID="lnbCopy" runat="server" AlternateText="Delete" 
                    CommandName="DeleteRecord"  CommandArgument='<%# Bind("TimeID") %>'  OnClientClick="return confirm('Are you sure you want to delete this row?');"  ImageUrl="~/images/delete_record.jpg" />
            </ItemTemplate>

           <EditItemTemplate>
                <asp:Label ID="lblTimeID" runat="server" Text='<%# Eval("TimeID") %>'></asp:Label>
            </EditItemTemplate>
        </asp:TemplateField>









    </Columns>


</asp:GridView>

これが私が背後のコードで行ったことです

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) {
    GridView1.EditIndex = e.NewEditIndex;
    loadTable();
}

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) {
    GridView1.EditIndex = -1;
    loadTable();
}

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) {

    GridViewRow row = GridView1.Rows[e.RowIndex] as GridViewRow;


    var StartTime = row.FindControl("txtStartTime") as TextBox;
    var EndTime = row.FindControl("txtEndTime") as TextBox;
    var id = row.FindControl("lblTimeID") as Label;

    SqlConnection conn = new SqlConnection(conStr.GetConnectionString("myServer1"));

    SqlCommand comm = new SqlCommand();

    comm.CommandText = "UPDATE CDSTimeSheet SET StartTime = @StartTime, EndTime = @EndTime ,timeElapsed = datediff(minute,@startTime , @EndTime), timeInSeconds = datediff(second,@startTime , @EndTime) WHERE TimeID = @id";
    comm.Connection = conn;

    comm.Parameters.AddWithValue("@id", id.Text);
    comm.Parameters.AddWithValue("@StartTime", StartTime.Text);
    comm.Parameters.AddWithValue("@EndTime", EndTime.Text);

    conn.Open();
    comm.ExecuteNonQuery();
    conn.Close();
    GridView1.EditIndex = -1;
    loadTable();
}

私は何を間違っていますか?

4

1 に答える 1

0

DataBind基になるデータを更新した後、グリッドで呼び出していないように思えます。更新を実行した後(おそらく、loadTableそこに参照されているメソッド内で)、呼び出します

GridView1.DataBind();

これにより、グリッド内のデータが更新されます。


コメントの後、実際の着信更新フィールド値を取得するためにパラメーターでNewValuesコレクションを使用していないことがわかりました。GridViewUpdateEventArgsこれを試して:

String StartTime = e.NewValues["StartTime"].ToString();
String EndTime = e.NewValues["EndTime"].ToString();
String id = e.Keys[0].ToString(); 

これらの変数はTextBoxs ではなく文字列であるため、パラメーターとして追加するときに ".Text" を追加する必要はありません。

于 2013-01-22T04:59:36.693 に答える