【问题标题】:fill datatable column with database values as images用数据库值作为图像填充数据表列
【发布时间】:2017-09-06 21:34:34
【问题描述】:

我想从数据库中检索用户名列表并将其作为图像显示在数据表中,当悬停在任何图像上时,它会显示用户名。我的代码将开发人员姓名列显示为以逗号分隔的开发人员列表。

这是我的代码:

项目类

public class Projects
    {
        public int project_number { get; set; }
        public string project_name { get; set; } 
        public string developer_name { get; set; }
        public  Image team_members { get; set; }
    }

json

columns: [
     { 'data': 'project_name' },
     { 'data': 'developer_name' },
     {
        "data": "team_members",
        "render": function (data, type, full, meta) {
        var markup = '';
        for (var i = 0; i < data; i++) {
           markup += '<img src="images/img.jpg" class="avatar" title="'++'">' }
       return markup;
       }
   }             
]

asmx:

    public void GetProjects()
        {
            SqlConnection conn = new SqlConnection("connection statement");
            conn.Open();

            var projects = new List<Projects>();

            using (var cmd = new SqlCommand("getProjects", conn) { CommandType = CommandType.StoredProcedure })
            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        var Project = new Projects
                        {
                            project_number = Convert.ToInt32(dr[1].ToString()),
                            project_name = dr[2].ToString(),
                        };
                        projects.Add(Project);

                        using (SqlCommand com = new SqlCommand("SELECT user_name FROM Users WHERE user_id IN (SELECT user_id FROM User_Projects WHERE project_number = @project_number)", conn))
                        {
                            com.Parameters.AddWithValue("@project_number", Project.project_number);
                            List<string> developerNames = new List<string>();

            using (SqlDataReader rdrDev = com.ExecuteReader())
                            {
                                if (rdrDev.HasRows)
                                {
                                    while (rdrDev.Read())
                                    {
developerNames.Add((string)rdrDev["user_name"]);
                                    }
                                }
                            }
                   Project.developer_name = string.Join(", ", developerNames);
                        }
                    }
                }
                var js = new JavaScriptSerializer();
                Context.Response.Write(js.Serialize(projects));
            }

        }

【问题讨论】:

  • 由于每个项目都有多个开发人员/团队成员,您不应该像一对多的关系吗?所以我想你最好创建一个 TeamMembers 类和一个团队成员和图像之间的映射表?
  • @Dennis1679 我以前做过这个想法。我有开发人员类和项目类,但因为我有嵌套的 sql 语句,所以我删除了开发人员类并将开发人员名称添加到项目类。查看我的编辑以查看查询。
  • 好吧,我认为列表的问题在于,您在课堂上声明了public Image team_members { get; set; },然后您在代码中说应该将Project.team_members 设置为Handcards,但是你列出的手牌。因此错误。如果这对您有任何意义。
  • developer_name 包含所有开发者姓名?

标签: c# asp.net json datatable asmx


【解决方案1】:

您可以在列声明中使用参数render。 拆分开发人员名称并对其进行处理以正确生成标记:

{
   "data": "developer_name",
   "render": function (data, type, full, meta) {
       var markup = '';
       var developers = data.split(',');
       for (var i = 0; i < developers.length; i++) {
           markup +='<img src="images/img.jpg" class="avatar" title="' + developers[i] + '">'
       });
       return markup ;
   }
}

【讨论】:

  • 你能给我一些关于渲染功能的教育链接吗?再次非常感谢你让我的一天很开心
  • @alaa 好的。给我几分钟
  • @alaa there official docs 我曾经了解它是如何工作的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 2023-03-18
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多