2009-03-20 3 views
0

У меня есть gridview в моей форме. FirstTime in pageload iam loading gridview, вызывая функцию «FillgridFileExpenses()».Как получить DataTable во всех событиях GridView

Sub FillgridFileExpenses() 
     If txtInvFileNo.Text = String.Empty Then 
      objinvoiceT.intfileID = 0 
     Else 
      objinvoiceT.intfileID = Convert.ToInt32(txtInvFileNo.Text) 
     End If 
     temptab1 = objinvoiceT.selFileExpensesView() 
     temptab1.Columns.Add("AllInRate") 
    If (temptab1.Rows.Count > 0) Then 
     GridViewInvoiceT.DataSource = temptab1 
     dtInvoice = temptab1 
     'dtInvoice.Columns.Add("AllInRate") 
     GridViewInvoiceT.DataBind() 
     GridViewInvoiceT.Columns.Item(10).Visible = True 
    Else 
     temptab1.Rows.Add(temptab1.NewRow()) 
     GridViewInvoiceT.DataSource = temptab1 
     dtInvoice = temptab1 
     GridViewInvoiceT.DataBind() 
     Dim TotalColumns As Integer 
     TotalColumns = GridViewInvoiceT.Rows(0).Cells.Count 
     GridViewInvoiceT.Rows(0).Cells.Clear() 
     GridViewInvoiceT.Rows(0).Cells.Add(New TableCell()) 
     GridViewInvoiceT.Rows(0).Cells(0).ColumnSpan = TotalColumns 
     If txtInvFileNo.Text = String.Empty Then 
      GridViewInvoiceT.Rows(0).Cells(0).Text = "No Record Found, Must Select a File Number " 
     Else 
      GridViewInvoiceT.Rows(0).Cells(0).Text = "No Record Found For File Number : " + " " + txtInvFileNo.Text 
     End If 
    End If 
End Sub 

В приведенном выше коде IAM с помощью DataTable с именем dtInvoice.Whatever изменения IAM решений в GridView событий, таких как удаление или обновление или добавление новой строки, все они должны отражать в dtInvoice и не database.Iam получать dtInvoice в обновлении событий, но при удалении dtInvoice приходит без каких-либо строк и получить error.Following мой код для обновления и удаления

Protected Sub GridViewInvoiceT_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridViewInvoiceT.RowUpdating 
    cmbChargeName = CType(GridViewInvoiceT.Rows(e.RowIndex).FindControl("cmbChargeName"), DropDownList) 
    cmbInvCurency = CType(GridViewInvoiceT.Rows(e.RowIndex).FindControl("cmbInvCurency"), DropDownList) 
    txtInvoiceNo1 = CType(GridViewInvoiceT.Rows(e.RowIndex).FindControl("txtInvoiceNo1"), TextBox) 
    txtInvoiceDate1 = CType(GridViewInvoiceT.Rows(e.RowIndex).FindControl("txtInvoiceDate1"), TextBox) 
    txtInvAmount1 = CType(GridViewInvoiceT.Rows(e.RowIndex).FindControl("txtInvAmount1"), TextBox) 
    txtInvExRate1 = CType(GridViewInvoiceT.Rows(e.RowIndex).FindControl("txtInvExRate1"), TextBox) 
    txtInvRemarks1 = CType(GridViewInvoiceT.Rows(e.RowIndex).FindControl("txtInvRemarks1"), TextBox) 
    cmbAllinRight = CType(GridViewInvoiceT.Rows(e.RowIndex).FindControl("ddAllInRate"), DropDownList) 
    Dim lblAllInRate As Label = CType(GridViewInvoiceT.Rows(e.RowIndex).FindControl("lblAllInRate"), Label) 
    objinvoiceT.intfileID = Convert.ToInt32(txtInvFileNo.Text) 
    dtInvoice.Rows(e.RowIndex).Item("AllInRate") = cmbAllinRight.SelectedItem 
    dtInvoice.Rows(e.RowIndex).Item("ChargeName") = cmbChargeName.SelectedItem 
    dtInvoice.Rows(e.RowIndex).Item("InvoiceNo") = txtInvoiceNo1.Text 
    If txtInvoiceDate1.Text = String.Empty Then 
     dtInvoice.Rows(e.RowIndex).Item("InvoiceDate") = Convert.ToDateTime("1/1/1800") 
    Else 
     dtInvoice.Rows(e.RowIndex).Item("InvoiceDate") = Convert.ToDateTime(txtInvoiceDate1.Text) 
    End If 
    dtInvoice.Rows(e.RowIndex).Item("Currency") = cmbInvCurency.SelectedItem 
    dtInvoice.Rows(e.RowIndex).Item("InvAmount") = txtInvAmount1.Text 
    dtInvoice.Rows(e.RowIndex).Item("InvExRate") = txtInvExRate1.Text 
    dtInvoice.Rows(e.RowIndex).Item("InvRemarks") = txtInvRemarks1.Text 
    GridViewInvoiceT.EditIndex = -1 
    GridViewInvoiceT.DataSource = dtInvoice 
    GridViewInvoiceT.DataBind() 
    FillInvoice() 

End Sub 

Protected Sub GridViewInvoiceT_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridViewInvoiceT.RowDeleting 
      dtInvoice.Rows.Remove(GridViewInvoiceT.DataKeys(e.RowIndex).Value) 
    GridViewInvoiceT.DataSource = dtInvoice 
    GridViewInvoiceT.DataBind() 
End Sub 

End Sub Sub FillInvoice()

GridViewInvoiceT.DataSource = dtInvoice 
    GridViewInvoiceT.DataBind() 
End Sub 

Может ли кто-нибудь помочь получить dtInvoice с отраженными изменениями, которые я сделал при обновлении при удалении?

ответ

1

В вашем методе GridViewInvoiceT_RowDeleting измените;

dtInvoice.Rows.Remove(GridViewInvoiceT.DataKeys(e.RowIndex).Value)  

использовать метод «Удалить» в DataRow.

Удалить - удаляет строку для данных, что приводит к тому, что поставщик данных больше не замечает строку. Используя delete, вы указываете на отметку строку, которую нужно удалить, поэтому код вашего провайдера будет отмечать удаление и запросить удаляемую строку из базы данных.

Смежные вопросы