2012-06-30 56 views
0

我想更新gridview行,但我不斷得到重複的異常錯誤。我正在使用C#。我正在使用3層架構。我能夠插入記錄,但無法更新記錄。 請幫助謝謝asp淨更新gridview行

<asp:GridView ID="GridView3" runat="server" AutoGenerateColumns="False" AutoGenerateEditButton="True" OnRowEditing="EditRecord" OnRowUpdating="UpdateRecord" DataKeyName = "payClaimId"> 
<Columns> 
<asp:TemplateField HeaderText="Duty ID"> 
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "dutyId")%></ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Pay Claim ID"> 
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "payClaimId")%></ItemTemplate> 
<EditItemTemplate><asp:TextBox ID="txtpayclaimid" runat="Server" ReadOnly ="true" Text ='<%# Eval("payClaimId") %>'></asp:TextBox></EditItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Date Submitted"> 
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "printeddate", "{0:d}")%></ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Date Worked"> 
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "dateWorked", "{0:d}")%></ItemTemplate> 
<EditItemTemplate><asp:TextBox ID="txtdateworked" runat="Server" Text ='<%# Eval("dateWorked", "{0:d}") %>'></asp:TextBox></EditItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Total Hours"> 
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "totalHours")%></ItemTemplate> 
<EditItemTemplate><asp:TextBox ID="txttotalhours" runat="Server" Text ='<%# Eval("totalHours") %>'></asp:TextBox></EditItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Status"> 
<ItemTemplate><%# DataBinder.Eval(Container.DataItem, "status")%></ItemTemplate> 
</asp:TemplateField> 

</Columns> 
</asp:GridView> 
private void loaddata() 
    { 
     DataTable dt = new DataTable(); 
     Timesheet ts = new Timesheet(); 
     dt = ts.gettimesheetrecords(Convert.ToInt32(txtboxeid.Text)); 
     GridView3.DataSource = dt; 
     GridView3.DataBind(); 
    } 

    protected void EditRecord(object sender, GridViewEditEventArgs e) 
    { 

     GridView3.EditIndex = e.NewEditIndex; 

     loaddata(); 

    } 
    protected void UpdateRecord(object sender, GridViewUpdateEventArgs e) 
    { 
     GridViewRow row = (GridViewRow)GridView3.Rows[e.RowIndex]; 
     TextBox pcid = (TextBox)row.FindControl("txtpayclaimid"); 
     TextBox dworked = (TextBox)row.FindControl("txtdateworked"); 
     TextBox tHours = (TextBox)row.FindControl("txttotalhours"); 
     int payClaimId = int.Parse(pcid.Text); 
     string dateWorked = Convert.ToString(dworked.Text); 
     double totalHours = double.Parse(tHours.Text); 
     int res = 0; 
     PayClaim pc = new PayClaim(); 


     try 
     { 
      res = pc.updatepayclaim(payClaimId, dateWorked, totalHours); 
      if (res > 0) 
      { 
       statuslabel.Text = "Record saved"; 
       GridView3.EditIndex = -1; 

       loaddata(); 
      } 
      else 
      { 
       statuslabel.Text = "Duplicates"; 
      } 
     } 
     catch (Exception ex) 
     { 
      statuslabel.Text = "Error"; 
     } 
     finally 
     { 
      pc = null; 
     } 
    } 

我插入payclaim方法

public int updatepayclaim(int payClaimId, string dateWorked, double totalHours) 
    { 

     dbCon = new OleDbConnection(sConnection); 

     dbCon.Open(); 
     OleDbCommand com = dbCon.CreateCommand(); 
     com.CommandText = "Update PayClaim Set totalHours=?, dateWorked=? where payClaimId=?"; 
     try 
     { 
      com.Parameters.AddWithValue("payClaimId", payClaimId); 
      com.Parameters.AddWithValue("dateWorked", dateWorked); 
      com.Parameters.AddWithValue("totalHours", totalHours); 
      return com.ExecuteNonQuery(); 
     } 
     catch 
     { 
      throw; 
     } 
     finally 
     { 
      com.Dispose(); 
      dbCon.Close(); 
      dbCon.Dispose(); 
     } 
    } 
+0

你得到一個錯誤或'statuslabel.Text =「重複」;'執行? – Louis

+0

我在運行時得到statuslabel.text = duplicateates異常。 – gogogo

回答

0

我認爲,爲了回答你的問題,你需要以示對PayClaim updatepayclaim方法的代碼。

從你的描述我假設你得到一個異常,而不僅僅是一個大於0(res> 0)的返回碼和設置一個標籤重複 - 因爲如果你通過顯示你的狀態標籤的代碼得到一個異常是'錯誤'。

請說明。

+0

我得到statuslabel.text =運行時重複異常,我更新了我的payclaim方法,當我設置斷點,我可以看到通過的值,但我不知道爲什麼數據未更新數據庫中....感謝您的幫助 – gogogo

0

我不認爲這是正確的語法。我會嘗試這樣的事:

com.CommandText = "Update PayClaim Set totalHours='@pTotalHours', dateWorked='@pDateWorked' where payClaimId='@pPayClaimId'"; 
try 
{ 
    com.Parameters.AddWithValue("@pPayClaimId", payClaimId); 
    com.Parameters.AddWithValue("@pDateWorked", dateWorked); 
    com.Parameters.AddWithValue("@pTotalHours", totalHours); 
    return com.ExecuteNonQuery(); 
} 

我也很好奇地想知道的res值,如果是-1錯誤或0沒有行更新(你必須將其初始化爲非零,像-2一樣,以確保後者)。

+0

謝謝,但我遵循你的建議,但仍無法更新。我改變了int res = -2 ...或者有更好的方法從後面的代碼中調用方法嗎?還是我錯誤地聲明瞭我的方法?謝謝 – gogogo

+0

當你調試時,res的價值是多少?我將更新代碼以將參數包含在引號中,也許這就是問題所在。 – Louis