1

linq クエリの結果を asp.net ページの gridview コントロールにバインドするのが難しいと感じています。メインのLinqクエリでは、「フォーム完了」をチェックする列の基準を満たす1つのテーブルからすべてのユーザーを取得しています-

using (COLA_AccreditationEntities4 eFactory = new COLA_AccreditationEntities4())
{
    var evaluations = eFactory.Symposium_Evaluation.Where(a => 
            (!a.Completed.HasValue || 
              a.Completed.Value == 0) && a.Active && a.UserID >= 2063).ToList();

次に、コード内で foreach ループを実行して、前のテーブルのユーザー ID と一致する他のテーブルからすべてのユーザー ID を取得しています -

foreach (var eval in evaluations)
{
    var user = eFactory.SYMPOSIUM_Users.Where(a => a.UserID == eval.UserID.Value 
                         && a.Active.Value && a.UserRole == 1).FirstOrDefault();

    if (user != null && !users.Contains(user.UserID))
    {
        string name = user.FirstName + " " + user.LastName;
        string email = user.Email;
    }
}

私がやりたかったのは、user.firstname + user.lastname + user.email を画面に表示することだけです。これをバインドするために gridview コントロールを使用しましたが、望ましい結果が得られませんでした。

これを達成する方法について何か考えはありますか?

4

2 に答える 2

2

クエリから直接グリッドにバインドできるはずです。

`var users = eFactory.SYMPOSIUM_Users.Where(a => a.UserID == eval.UserID.Value && a.Active.Value && a.UserRole == 1); this.mygrid.DataSource = ユーザー;

チュートリアルについては、 asp.net Web サイトを参照することをお勧めします。良いコンテンツがたくさんあります。

更新:
おそらく最善の解決策は、2 つのテーブルの結合から匿名型を作成することです。これにより、データ ストアに繰り返しクエリを実行する必要がなくなり、データ バインディングがより簡単になります。

var result = (from i in eFactory.Symposium_Evaluation
              join user in eFactory.SYMPOSIUM_Users on i.UserID equals user.UserID
              where user.UserRole == 1 &&
                   ((!i.Completed.HasValue || 
                     i.Completed.Value == 0) && 
                    i.Active && a.UserID >= 2063)
              select new {
                  User = user,
                  Symposium = i
              }).ToList();

myDataGrid.DataSource = result;
myDataGrid.DataBind();

グリッド行テンプレートでは、次のことができます。

<%#Eval("User.FirstName")%>
<%#Eval("User.LastName")%>
<%#Eval("User.Email")%>
于 2012-10-22T20:11:30.920 に答える
0

ユーザータイプのリストを定義する

List<User> users= new List<User>();

以下のように 2 番目のコード ブロックを変更します。

foreach (var eval in evaluations)
{
    var user = eFactory.SYMPOSIUM_Users.Where(a => a.UserID == eval.UserID.Value 
                         && a.Active.Value && a.UserRole == 1).FirstOrDefault();

    if (user != null && !users.Contains(user.UserID))
    {
        users.Add(user);  
    }
}

gridview 内のバインディング コードを次のように変更します。

<%#Eval("FirstName")%>
<%#Eval("LastName")%>

最後に、グリッドをユーザーのリストにバインドします

this.mygrid.DataSource = users;
this.mygrid.DataBind();
于 2012-10-23T00:27:32.617 に答える