2013-04-01 2 views
0

안녕하세요 모두 특정 작업에 대한 viewstate에 대한 Datatable을 할당 할 것입니다. 각 단추에 행을 할당하고 해당 데이터 테이블에 바인딩하고 해당 데이터 테이블을 viewstate에 할당합니다. 내가 만든 datatable 바인딩 된 gridview 데있다. 그 나는 행을 삭제에서 삭제 옵션을 데 내가 viewstate가 지워지고 새로운 datattableviewstate를 지울 수 없습니다

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

그래, 내 대답을 참조하십시오 1 레코드가 잘 작동하지만, 두 번째 레코드를 삭제에 이전 값이 viewstate가 – Learner

+0

에 유지됩니다 그렇게 http://stackoverflow.com/ 아래 참조하십시오 a/15740413/2218635 –

+0

page_load에 데이터 테이블을 바인딩하지 않았는지, 그리고 grd_Deleting 이벤트에서 변경 한 내용을 쓰는 것이 끝났는지 확인하십시오. – Adil

0

페이지로드 이벤트에서! isPostBack 내에서 gridview 바인드 메소드 호출을 확인 하시겠습니까 ??

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