Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在C中显示数据列表项_C#_Asp.net_Datalist_Itemtemplate - Fatal编程技术网

C# 无法在C中显示数据列表项

C# 无法在C中显示数据列表项,c#,asp.net,datalist,itemtemplate,C#,Asp.net,Datalist,Itemtemplate,我正在网上聊天应用程序上做我的学校作业。我希望使用数据列表在聊天框中显示上一次聊天,但数据列表不会显示 这是我在.aspx中的代码: <asp:DataList ID="DataList3" runat="server"> <ItemTemplate runat="server"> <div class="lv-item media"> <div class="lv-avatar pull-left">

我正在网上聊天应用程序上做我的学校作业。我希望使用数据列表在聊天框中显示上一次聊天,但数据列表不会显示

这是我在.aspx中的代码:

<asp:DataList ID="DataList3" runat="server">
    <ItemTemplate runat="server">
        <div class="lv-item media">
            <div class="lv-avatar pull-left">
                <asp:Image ID="Image4" runat="server" ImageUrl='<%# Bind("Image") %>' />

            </div>
            <div class="media-body">
                <div class="ms-item">
                    <span class="glyphicon glyphicon-triangle-left" style="color: #000000;"></span>
                    <asp:Label ID="Message" runat="server" Text='<%# Bind("Message") %>'></asp:Label>
                </div>
                <small class="ms-date"><span class="glyphicon glyphicon-time"></span>&nbsp;
                    <asp:Label ID="Date" runat="server" Text='<%# Bind("Time") %>'></asp:Label></small>
            </div>
        </div>
    </ItemTemplate>
</asp:DataList>
这是我在.cs中的代码:

public void LoadChatbox()
{
    Session["Name"] = "weiwei";
    int waiwai = 1004;
    //Request.QueryString["friendid"] = "waiwai";
    Session["userid"] = 1005;

    int userid = int.Parse(Session["userid"].ToString());
    //int receiverid = int.Parse(Request.QueryString["friendid"]);
    int receiverid = waiwai;
    string name = Session["Name"].ToString();
    DataSet ds = new DataSet();
    ds.Locale = System.Globalization.CultureInfo.InvariantCulture;
    IEnumerable<DataRow> query =
    (from user in db.Users.AsEnumerable()
     join ch in db.ChatHistories.AsEnumerable()
         on user.Userid equals ch.Senderid
     where ch.Senderid == userid && ch.Receiverid == receiverid || ch.Receiverid == userid && ch.Senderid == receiverid orderby ch.id
     select new
     {
         Image = user.image,
         Message = ch.message,
         Time = ch.dateTime
     })
    as IEnumerable<DataRow>;

    DataTable chatbox = query.CopyToDataTable<DataRow>();
    ds.Tables.Add(chatbox);
    DataList3.DataSource = ds;
    DataList3.DataBind();
}
as IEnumerable导致查询变量为null,因为查询将导致匿名类型的集合,而不是DataRow对象的集合

您需要投影到DataRow项,或者使用其他方法填充DataTable


此外,如果没有必要,我也不会在查询中对数据集调用.AsEnumerable。它将强制将整个表加载到内存中,并在Linq中而不是在数据库中完成连接。如果删除一个可数项会导致问题,那么您应该找到一种不同的方法来解决这些问题。

我将代码更改为:

                var chatbox = new DataTable();
        chatbox.Columns.Add("Image", typeof(string));
        chatbox.Columns.Add("Message", typeof(string));
        chatbox.Columns.Add("Time", typeof(DateTime));
        (from user in db.Users.AsEnumerable()
         join ch in db.ChatHistories.AsEnumerable()
             on user.Userid equals ch.Senderid
         where ch.Senderid == userid && ch.Receiverid == receiverid || ch.Receiverid == userid && ch.Senderid == receiverid
         orderby ch.id
         select new
         {
             Image = user.image,
             Message = ch.message,
             Time = ch.dateTime
         })
         .Aggregate(chatbox, (dt, r) => { dt.Rows.Add(r.Image, r.Message, r.Time); return dt; });

它可以工作,谢谢。

刚刚发现我的查询变量为null,但是我应该怎么做才能将linq查询插入到数据表中?就像我说的,投影到数据行列表,或者从匿名集合向数据表添加行。关于如何做到这一点,还有其他问题和例子。
                var chatbox = new DataTable();
        chatbox.Columns.Add("Image", typeof(string));
        chatbox.Columns.Add("Message", typeof(string));
        chatbox.Columns.Add("Time", typeof(DateTime));
        (from user in db.Users.AsEnumerable()
         join ch in db.ChatHistories.AsEnumerable()
             on user.Userid equals ch.Senderid
         where ch.Senderid == userid && ch.Receiverid == receiverid || ch.Receiverid == userid && ch.Senderid == receiverid
         orderby ch.id
         select new
         {
             Image = user.image,
             Message = ch.message,
             Time = ch.dateTime
         })
         .Aggregate(chatbox, (dt, r) => { dt.Rows.Add(r.Image, r.Message, r.Time); return dt; });