0

こんにちは、各ボタンのような特定の操作でビューステートのデータテーブルを割り当てています。行を割り当て、それをデータテーブルにバインドし、そのデータテーブルをビューステートに割り当てます。私が作成していたデータテーブルにバインドされたグリッドビューを持っています。行を削除する際に削除オプションを使用しているため、ビューステートをクリアし、新しいデータテーブルに割り当てます

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回の削除後にそれを表示すると、データテーブルは以前の値を持つものと同じままで、どこが間違っていたのかを知ることができます

4

2 に答える 2

1

gridから行を削除した後、再度バインドする必要がありますdatatable。また、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();
}
于 2013-04-01T08:48:58.143 に答える
0

ページ読み込みイベントの !isPostBack 内で gridview bind メソッド呼び出しを確認しますか??

以下を参照してください

void page_load()
{
if(!IsPostBack)    
{
// call Bind grid method
}
}
于 2013-04-01T08:54:59.483 に答える