2016-07-13 5 views
0

データグリッドに次の列を設定する必要があります。 invnumberが、私は今、この複数テーブルのデータでデータグリッドを設定する

string commandText = "SELECT invnumber,cname,date FROM inv_table WHERE invnumber LIKE @id"; 
          SqlCommand command = new SqlCommand(commandText, conn); 
          string searchParam = String.Format("%{0}%", text_inv.Text); 
          command.Parameters.AddWithValue("@id", searchParam); 


          using (SqlDataAdapter sda = new SqlDataAdapter(command)) 
          { 
           using (DataTable dt = new DataTable()) 
           { 
            sda.Fill(dt); 
            dataGridView2.DataSource = dt; 
           } 
          } 

のように行うために使用される別のテーブル

から来ている間

invnumber、itemNameに、レート、数量...

itemNameに、レート、数量は1つのテーブルから来ています2つの異なるテーブルが関与するように私は直接データソースを割り当てることができません

dataGridView2.DataSource = dt; 

どうすればこの問題を回避できますか?

+0

なぜこれらのテーブルを結合しないのですか? –

+0

@ un-lucky ..あなたは例を投稿することができます.. – techno

答えて

1

、テーブル内の2つの以上の異なるテーブルの結合された結果を放射するあなたの必要性に応じて、どちらかINNER JOINLEFT JOINRIGHT JOINまたはUNIONステートメントを使用します。

この場合、最初のテーブルと他のテーブルを結合して、必要な結果を得る必要があります。invnumberは一意のキーまたは主キーです。次に例を示します。

string commandText = "SELECT other.invnumber, inv.cname, inv.date FROM inv_table AS inv 
INNER JOIN other_table AS other 
ON inv.invnumber = other.invnumber 
WHERE other.invnumber LIKE @id"; 

それとも、すでに各テーブル用のクラスを定義した場合は、ラムダ式でLINQ to SQLのを使用します。

DataContext dc = new DataContext(); 
var results = dc.InvTable.Join(OtherTable, inv => inv.invnumber, other => other.invnumber, (inv, other) => new { invnumber = other.invnumber, cname = inv.cname, date = inv.date }); 

どれ改善や提案を歓迎します。

+0

ありがとうございます。あなたは 'inv.invnumber = other.invnumber'という意味ですか?私は 'inv。'を意味します.. – techno

+0

私はどのフィールド'inv_table'を外部キーとして設計した場合、INNER JOIN内のON等価ステートメントを扱うときに、' inv_table'に 'other_table'の主キーに対する外部キーとして' invnumber'があると仮定します。 'inv_table'のための外部キーを' other_table'が存在する場合はそれを定義してください。 –

+0

私はidを両方のテーブルの主キーとして定義しました。 – techno

0

2つの異なるテーブルのデータ構造の新しいクラスを作成し、新しいテーブルを作成して使用します。 (簡単に、最も透明な溶液)

関連する問題