无法在C#中显示datalist项

时间:2017-01-09 19:51:59

标签: c# asp.net datalist itemtemplate

我正在网络聊天应用程序上完成学校作业。我希望使用datalist在聊天框中显示之前的聊天,但数据列表不显示。

这是我在.aspx中的代码:

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();
}

这是我在.cs中的代码:

// load file into a JObject
JObject document;
using (var fileStream = File.OpenRead(someFilePath))
using (var streamReader = new StreamReader(fileStream))
using (var jsonReader = new JsonTextReader(streamReader))
    document = JObject.Load(jsonReader);

// read the JObject
var bugs = (JObject) document["bugs"];
foreach (var bugEntry in bugs)
{
    var bugID = bugEntry.Key;
    var bugData = (JObject) bugEntry.Value;
    var comments = (JArray) bugData["comments"];
    foreach (JObject comment in comments)
        Debug.Print(comment["text"]);
}

2 个答案:

答案 0 :(得分:0)

 select new
 {
     Image = user.image,
     Message = ch.message,
     Time = ch.dateTime
 })
as IEnumerable<DataRow>;

as IEnumerable<DataRow>导致您的query变量为null,因为查询将导致匿名类型的集合,而不是DataRow个对象的集合。

您需要投放到DataRow项目或使用其他方式填充DataTable

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

答案 1 :(得分:0)

我将代码更改为:

                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; });

它有效,谢谢。

相关问题