2013-04-01 114 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 
} 
}