プロジェクトにシナリオがあり、動的な行を生成するグリッドビューと送信ボタンがあり、Editそれらの行を編集する画像ボタンがあり、これらの行は最初にデータテーブルにバインドされ、保存ボタンをクリックすると、データテーブルの保存に変更が反映されますデータベースにはUpdateボタンがありません
質問:
以前に編集した行をとに保存するにはどうすればよいDataTableですか?
Plzはその緊急を助けます
CommandName と CommandArgument を linkButton に配置し、保存コードを ItemCommand() に配置して、その GridView が機能するようにします。ああ、コマンド名は「Update」のようなものにする必要があり、引数はその行の ID にすることができます。
データテーブルを宣言し、列を追加して、グリッドからDBのテーブルに保存するすべてのデータを表します。グリッド内の行をループし、保存する各セルからデータを取得して、データテーブルの各列に追加します。データテーブルを使用して、DB のテーブルに一括挿入します。
DataTable dtMealTemplate = new DataTable();
dtMealTemplate.Columns.Add("MealTemplateID", Type.GetType("System.Int32"));
dtMealTemplate.Columns.Add("WeekNumber", Type.GetType("System.Int32"));
dtMealTemplate.Columns.Add("DayOfWeek", Type.GetType("System.String"));
foreach (GridView.Rows の GridViewRow gvr)
{
drMT = dtMealTemplate.NewRow();
drMT["MealTemplateID"] = gvr.Cells[0].text;
drMT["週番号"] = gvr.Cells[1].text;
drMT["DayOfWeek"] = gvr.Cells[2].Text;
dtMealTemplate.Rows.Add(drMT);
}
public void InsertMealsTemplate(int iMealTemplateID, DataTable dtMealsData)
{
SqlCommand cmd = new SqlCommand();
SqlDataAdapter sa = 新しい SqlDataAdapter(cmd);
SqlCommandBuilder cmb = new SqlCommandBuilder(sa);
SqlTransaction oTrans;
SqlConnection oConn = 新しい SqlConnection(GetConnectionString());
DataSet ds = 新しい DataSet();
oConn.Open();
cmd = oConn.CreateCommand();
oTrans = oConn.BeginTransaction();
cmd.Connection = oConn;
cmd.Transaction = oTrans;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM YOURTABLENAME WHERE 1 = 1";
sa = 新しい SqlDataAdapter(cmd);
cmb = 新しい SqlCommandBuilder(sa);
sa.MissingSchemaAction = MissingSchemaAction.AddWithKey;
cmd.Transaction = oTrans;
sa.Fill(ds, "テーブル名");
DataRow drNew;
整数 x = 0;
foreach (dtMealsData.Rows の DataRow dr)
{
if (Int32.Parse(dr["食事の詳細ID"].ToString()) == 0)
{
drNew = ds.Tables[0].NewRow();
drNew["食事テンプレートID"] = dr["食事テンプレートID"];
drNew["週番号"] = dr["週番号"];
drNew["曜日"] = dr["曜日"];
ds.Tables[0].Rows.Add(drNew);
}
}
sa.Update(ds.Tables["yourtablename"]);
oTrans.Commit();
oConn.Close();
}