2013-04-01 46 views
0

大家好我分配一個Datatable視圖狀態在某些操作像每個按鈕我將分配一行並將綁定到數據表並將該數據表分配給視圖狀態。我有一個gridview綁定了我創建的數據表。在此我有上刪除行刪除選項我清除了視圖狀態,並與新的datattable無法清除視圖狀態

DataTable dtPayment = new DataTable(); 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
    } 
} 

protected void btn_Click(object sender, EventArgs e) 
{ 
    if (ViewState["CurrentTable"] == null) 
    { 
    dtPayment.Columns.Add("Id", typeof(string)); 
    dtPayment.Columns.Add("PaymentMode", typeof(string)); 
    dtPayment.Columns.Add("TransactionAmount", typeof(string)); 
    dtPayment.Columns.Add("BankCharges", typeof(string)); 
    dtPayment.Columns.Add("Particulars", typeof(string)); 

    DataRow dr = dtPayment.NewRow(); 
    dr["Id"] = 1; 
    dr["PaymentMode"] = "Cheque"; 
    dr["TransactionAmount"] = txtAmount.Text; 
    dr["BankCharges"] = ""; 
    dr["Particulars"] = ""; 
    dtPayment.Rows.Add(dr); 
    ViewState["CurrentTable"] = dtPayment; 
    grd.DataSource = dtPayment; 
    grd.DataBind(); 
    } 
else 
{ 
    AddNewRowToGrid("Cheque", txtAmount.Text); 
} 

}

protected void grd_Deleting(object sender, DeletingEventArgs e) 
{ 
    dt = (DataTable)ViewState["CurrentTable"]; 
    int iIndex; 
    iIndex = grd.FocusedRowIndex; 
    dt.Rows[iIndex].Delete(); 
    dt.AcceptChanges(); 
    ViewState.Remove("CurrentTable"); 
    ViewState["CurrentTable"] = dt; 
    grd.DataSource = dt; 
    grd.DataBind(); 
} 

protected void AddNewRowToGrid(string strPaymntMode, string transAmount) 
    { 
     int rowIndex = 0; 
     //SetPreviousData(); 
     if (ViewState["CurrentTable"] != null) 
     { 
      DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"]; 
      DataRow drCurrentRow = null; 
      if (dtCurrentTable.Rows.Count > 0) 
      { 
       for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) 
       { 
        drCurrentRow = dtCurrentTable.NewRow(); 
        drCurrentRow["Id"] = i + 1; 
        drCurrentRow["PaymentMode"] = strPaymntMode; 
        drCurrentRow["TransactionAmount"] = transAmount; 
        drCurrentRow["BankCharges"] = ""; 
        drCurrentRow["Particulars"] = ""; 
        rowIndex++; 
       } 
       dtCurrentTable.Rows.Add(drCurrentRow); 
       ViewState["CurrentTable"] = dtCurrentTable; 
       grd.DataSource = dtCurrentTable; 
       grd.DataBind(); 
      } 
     } 

    } 

分配給它可是一個後觀看時它刪除數據表遺骸一樣每以前的值可以告訴我出錯的地方

回答

1

您必須從datatable刪除行後再綁定grid。還要確保你是否在page_load中綁定了gridview,那麼它就在if(!Page.IsPostBack)中。

protected void grd_Deleting(object sender, DeletingEventArgs e) 
{ 
    dt = (DataTable)ViewState["CurrentTable"]; 
    int iIndex; 
    iIndex = grd.FocusedRowIndex; 
    dt.Rows[iIndex].Delete(); 
    dt.AcceptChanges(); 
    ViewState.Remove("CurrentTable"); 
    ViewState["CurrentTable"] = dt; 
    //You have to bind the grid with new data table. 
    GridView1.DataSource = dt; 
    GridView1.DataBind(); 
} 
+0

是的,我做的第一個記錄它工作正常,但在刪除第二個記錄之前的值被保留在ViewState – Learner

+0

見我的回答http://stackoverflow.com/ a/15740413/2218635 –

+0

檢查您是否未綁定page_load上的數據表,並且已經結束了您在grd_Deleting事件中所做的更改。 – Adil

0

在頁面加載事件中檢查您的gridview綁定方法調用!isPostBack!

對於見下文

void page_load() 
{ 
if(!IsPostBack)  
{ 
// call Bind grid method 
} 
}