0

フォームに GeidView があり、Datatable に行を追加して GridView に新しいレコードを追加し、この DataTable を GridContol のデータ ソースにするボタンがあります。

問題は、GridView に表示される新しいレコードを追加するときですが、GridView に表示されない別のレコードを追加すると、GridView には DataTable に追加した最初の行が常に含まれています。

この問題を解決するのを手伝ってくれませんか?

これはソースコードです:

private DataTable recompensesTable;

private void AjoutLivre_Load(object sender, EventArgs e)
        {
          recompensesTable = MakeRecomponsesTable();
          recompenseGridControl.DataSource = recompensesTable;
        }
private DataTable MakeRecomponsesTable()
        {
            DataTable recmpensesTable = new DataTable("Recompenses");

            var anneeColumn = new DataColumn();
            anneeColumn.DataType = Type.GetType("System.Int32");
            anneeColumn.ColumnName = "Année";
            recmpensesTable.Columns.Add(anneeColumn);

            var prixLiteraireColumn = new DataColumn();
            prixLiteraireColumn.DataType = Type.GetType("System.String");
            prixLiteraireColumn.ColumnName = "Prix Litéraire";
            recmpensesTable.Columns.Add(prixLiteraireColumn);

            return recmpensesTable;
        }

private void nouveauRecompense_Click(object sender, EventArgs e)
        {
            DataRow row = recompensesTable.NewRow();

            row[0] = ajoutRecompense.KeyWordAnnee;
            row[1] = ajoutRecompense.KeyWordPrixLiteraire;
            recompensesTable.Rows.Add(row);

            recompenseGridControl.DataSource = recompensesTable;
        }
4

3 に答える 3

2

あなたの Page_Load にはrecompensesTable = MakeRecomponsesTable();. これにより、変更が上書きされ、データテーブルの値が再作成されます

ページのポストバックでは、変数はデフォルト値に復元されるため、再作成する必要があります。セッションを使用して値を維持できます

private void AjoutLivre_Load(object sender, EventArgs e)
{
   if(!Page.IsPostBack)
   {
     DataTable recompensesTable = MakeRecomponsesTable();
     Session["recompensesTable"] = recompensesTable; //Save it to session the first time
     recompenseGridControl.DataSource = recompensesTable;
   }
}

セッション保存値を取得します

private void nouveauRecompense_Click(object sender, EventArgs e)
{
    DataTable recompensesTable = (DataTable) Session["recompensesTable"]; //retrieve it from session
    DataRow row =  recompensesTable.NewRow();

    row[0] = ajoutRecompense.KeyWordAnnee;
    row[1] = ajoutRecompense.KeyWordPrixLiteraire;
    recompensesTable.Rows.Add(row);

    Session["recompensesTable"] = recompensesTable; //save it back to session

    recompenseGridControl.DataSource = recompensesTable;
}
于 2012-10-13T01:14:34.170 に答える
0

あなたを変える

private void AjoutLivre_Load(object sender, EventArgs e)
    {
      recompensesTable = MakeRecomponsesTable();
      recompenseGridControl.DataSource = recompensesTable;
    }

private void AjoutLivre_Load(object sender, EventArgs e)
    {
      if(!IsPostback)
         recompensesTable = MakeRecomponsesTable();
      recompenseGridControl.DataSource = recompensesTable;
    }

また、データテーブルをセッションに保存する必要があります

于 2012-10-13T01:16:44.303 に答える
-1

recmpensesTable は常に新しい DateTable であるため、次回使用するためにセッションに保存する必要があります。

于 2012-10-13T01:13:23.287 に答える