2017-01-26 7 views
1

datatableから値が入力されたgridがあります。私が達成しようとしている何データテーブルをループして値を取得し、ヘッダーを返す

Grid

はを選択だ各row & columnをループしている、と私はテーブルを更新することができるように変数に値のセットを格納します。

したがって、例えば、ループは431 /の値、P1及び88.2〜3の変数格納、P1で開始すべきである:更新を実行

string sub = '431/' 
string code = 'P1' 
decimal newbaseprice = 88.2 

を:

UPDATE MyPriceTable 
SET BasePrice = newbaseprice 
WHERE PartNum = sub and ListCode=code 

そしてP2 & P3が更新されるまで続きます。

これまでのところ、特定の行から値を取得できましたが、列名を取得して更新に適用する方法はわかりません。

foreach(DataRow row in ((DataTable)this.grdPart.DataSource).Select("Seleccionar= true")) 
     { 
      string sub = row["SUB"].ToString(); 
      string p1 = row["P1"].ToString(); 
      string p2 = row["P2"].ToString(); 
      string p3 = row["P3"].ToString(); 
} 

誰かがこの問題を解決する方法についてもう1つアプローチしていますか?

答えて

3

問題は、Grid上のDataBoundであり、グリッドの後ろのデータを更新し、グリッドをリフレッシュする方法が不思議です。

最初の問題は、複数の選択がループ内の上書きにつながることです。これは、すべての値を最新の反復と同等にすることになりますが、これは役に立ちません。私はこれに対処するためにプライベートネストクラスを作ることをお勧めします。

private class DItem 
{ 
    public string sub {get;set;} 
    public string p1 {get;set;} 
    public string p2 {get;set;} 
    public string p3 {get;set;} 
} 

そして、あなたはそれをこのように使用します。

var litms = new List<DItem>() 
foreach(DataRow row in ((DataTable)this.grdPart.DataSource).Select("Seleccionar= true")) 
     { 
      var item = new DItem(); 
      item.sub = row["SUB"].ToString(); 
      item.p1 = row["P1"].ToString(); 
      item.p2 = row["P2"].ToString(); 
      item.p3 = row["P3"].ToString(); 
      litms.Add(item); 
     } 

次に、あなただけのLINQを使用して、クラスのリストを呼び出し、方法、または(正しい道)は、あなたのDataTableを更新値を割り当てることができます値と再バインドします。名前を無関係にするために、列名またはそのインデントを使用できます。

関連する問題