2012-06-30 4 views
0

Я пытаюсь обновить строку gridview, но я продолжаю получать повторяющуюся ошибку исключения. Я использую C#. Я использую трехуровневую архитектуру. Я могу вставить записи, но не смог обновить запись. пожалуйста, помогите спасибоasp net update gridview row

<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 =" Duplicates ";' выполняет? – Louis

+0

Я получаю исключение statuslabel.text = дублирует при запуске. – gogogo

ответ

0

Я думаю, что для того, чтобы ответить на ваш вопрос, вам нужно будет показать код для метода updatepayclaim PayClaim.

Из вашего описания Я предполагаю, что вы получаете исключение, а не только код возврата больше 0 (res> 0) и настройку метки на Duplicates - потому что, если вы получаете исключение по коду, указанному вашим ярлыком статуса, «Ошибка».

Просьба уточнить.

+0

Я получаю исключение statuslabel.text = duplicates при запуске, я обновил свой метод 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