2016-08-16 3 views
1

Root/Main/Parent Websites(localDB、Dataset)として2つのHomepagesの表があります。私はストアドプロシージャを実装したい。 Webサイトのすべての親をリストし、結果[ID、親ID、名前]をDataGridViewに表示します。C#WinFormはコンボボックスで選択した名前をストアドプロシージャに渡します

私はSPROCを

CREATE PROCEDURE GetIDbyID (@childname varchar(50)) AS 

;With CTE (ID 
     , name 
     , parentID 
     , Level) AS 
(SELECT e.ID 
     , e.name 
     , e.parentID 
     , 0 AS Level 

    FROM page AS e 
    WHERE e.name LIKE @childname 

UNION ALL 

SELECT e.ID 
     , e.name 
     , e.parentID 
     , Level+1 

    FROM page AS e 
    INNER JOIN CTE AS h 
    ON h.parentID = e.ID 
    ) 
SELECT DISTINCT ID 
       , name 
       , parentID 
FROM CTE 
ORDER BY ID 

私は私はそれがデータベースへの接続を構築して一覧表示するには、管理Webサイト

USE [C:\...DATABASE1.MDF] 
GO 

DECLARE @return_value Int 

EXEC @return_value = [dbo].[GetIDbyID] 
     @childname = N'**Page..**' //How to insert the page here that is selected in the combobox??? 

SELECT 'Return Value' = @return_value 

GO 

を挿入することが可能なこのクエリを取得しています実行される次ましたコンボボックスのテーブル全体。列とSPへの接続を持つDataGridViewも既に存在します。今私の願いは、コンボボックスでサイトを選択すると、DataGridViewがすぐにSPの値で埋められるということです。それはこのCTEでも可能ですか?

これを実現する方法はありますか?

+2

使用するdbms製品にタグを付けます。 (そのSPはANSI SQLのようには見えません) – jarlh

+3

は、ComboBox.SelectedIndexChangedを使用してDataGridをリフレッシュ/バインドするように思えます。あなたはあなたのSQLコードを投稿していますが、これは実際にはC#の質問のように私はあなたがそのコードを投稿する必要があることを伝えることができます – Matt

+0

@マットありがとう!私はしたいと思いましたが、コードに問題はなかったので、このSQLが互換性があるかどうか確かめたいだけでした。以下の答えは私が必要としていたものです:-) – Mephistopheles

答えて

0

私は通常、datagridviewを塗りつぶして別のプロシージャを作成し、データを変更したいイベントから呼び出します。

public void fillDataGridView() 
{ 
    using (SqlConnection connection = new SqlConnection(yourConnectionString)) 
     { 
      using (SqlCommand scmd = new SqlCommand("[dbo].[GetIDbyID]", connection)) 
      { 
       connection.Open(); 
       scmd.CommandType = CommandType.StoredProcedure; 
       scmd.Parameters.AddWithValue("@childname", comboBox.SelectedValue); //add as many parameters as you need 
       SqlDataAdapter sda = new SqlDataAdapter(scmd); 
       DataTable dt = new DataTable(); 
       sda.Fill(dt); 
       connection.Close(); 
       dataGridView.DataSource = dt; 
       dataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); //this just autosizes the columns to their contents and is optional 
      } 
     } 
} 

あなたはSelectedIndexChangedイベントからこれを呼び出して、および/またはクリックでそれを実行するためのボタンを作成することができます。ここではあなたが始めなければならない例です。

+0

ありがとうございました!ちょうどボタンでこのようにして、それは正常に動作します。速い返信をありがとう! – Mephistopheles