0

DataGridView に表示したいデータベース テーブルがあります。ただし、いくつかの外部キーがあり、他のテーブルを表す整数をユーザーに表示したくありません。

列 userId を持つこの DataTable があります。列 ID と列 username を持つ別の DataTable があります。

userId = id である userId の代わりに、DataGridView にユーザー名を表示する必要があります。

これどうやってするの?また、表示される同じテーブルのいくつかの列でこれを行う必要があります。

編集: Web フォームではなく、Windows フォーム。

4

5 に答える 5

2

考慮すべきいくつかのオプションがあります...

1-データベースにアクセスできる場合は、「非正規化」データを返すビューまたはストアドプロシージャを作成します。次に、GridViewをこれに直接バインドすると、すべてが完了します。

2-取得する必要のあるフィールドのテンプレート列を作成します。次に、GridViewのRowDataboundイベントで、プログラムで呼び出して適切なルックアップ情報を取得し、指定された列に表示できます。コードは次のようになります。

protected void FormatGridView(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
   if (e.Row.RowType == DataControlRowType.DataRow) 
   {
      e.Row.Cells[1].Text = GetUserId(Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "userid"));
   }
}
于 2008-12-23T19:03:42.133 に答える
2

DataTableにどのようにデータを入力していますか?DataAdapterの.SelectCommandへの結合と適切な列を使用してカスタムSQLを指定するか、xxxCommandオブジェクトの.CommandTextでカスタムSQLを指定できます。

例えば

myAdapter.SelectCommand = "Select a.column1, a.column2, b.username from tablea a inner join tableb b on b.userid = a.userId"

または

myCommand.CommandType = Text;
myCommand.CommandText = ""Select a.column1, a.column2, b.username from tablea a inner join tableb b on b.userid = a.userId";

または、前述のように、データベースにビューまたはstoredprocを作成して、それを呼び出すことができます。

于 2008-12-23T19:09:00.530 に答える
1

ユーザーの名前や必要なフィールドを取得するために必要な結合を行うストアドプロシージャを作成し、それをこの情報を持つクラスにマップして、datagridViewをにバインドすることができます。List<YourClass>

于 2008-12-23T19:02:46.317 に答える
0

Linqを使用していますか?
Linq を使用している場合、デザイナーで適切な関連付けを設定していれば、列の DataPropertyName を "User.UserName" に設定できるためです。

于 2008-12-23T19:45:01.830 に答える
0

DataGridView を DataSet にバインドできます。DataSet には、1 つ以上のデータ テーブルを含めることができます。最初のデータ テーブルには、userid 列を含む SELECT ステートメントを入力できます。2 番目のデータ テーブルには、ユーザー名と ID を含めることができます。次に、最初のテーブルのユーザー ID を 2 番目のテーブルの ID にマップするデータセットの Relations コレクションに関係を追加します。データセットを使用して、ユーザー ID ではなくユーザー名のみを表示する新しいデフォルト ビュー マネージャーを作成します。DataGridView のデータソースをデータセットの DefaultViewManager に設定します。

于 2009-03-04T19:40:32.053 に答える