如何将objectdatasource与Gridview绑定

时间:2011-07-05 14:37:29

标签: c# asp.net gridview

更新:这是工作版本。

public DataSet GetObjects()
{
    DataSet ds = new DataSet();
    DataTable dt = new DataTable();
    var source = from p in CommentsList
                 select new { p.Img, p.Name, p.Comment };
    dt.Columns.Add("Img");
    dt.Columns.Add("Name");
    dt.Columns.Add("Comment");

    foreach (var item in source)
    {
        DataRow userDetailsRow=dt.NewRow();
        userDetailsRow["Img"] = item.Img;
        userDetailsRow["Name"] = item.Name;

        DataRow comments = dt.NewRow();
        userDetailsRow["Comment"] = item.Comment;
        dt.Rows.Add(userDetailsRow);
        //dt.Rows.Add(comments);
    }
    ds.Tables.Add(dt);
    return ds;
}

我的GridView列部分如下所示:

 <Columns>
  <asp:TemplateField HeaderText="#">
                    <HeaderStyle Width="500px" />
                     <ItemStyle Width="500px" Height="100px" />
                    <ItemTemplate>
                        <asp:Label ID="lblMessage" runat="server"  Text='<%# Bind("Comment") %>'></asp:Label>
                    </ItemTemplate>
   </asp:TemplateField>

       <asp:TemplateField HeaderText="#">
                    <HeaderStyle Width="100px" />
                      <ItemStyle Width="100px" Height="100px" />
                    <ItemTemplate>
                        <asp:Image ID="imgName" runat="server"  imageUrl='<%# Bind("Img") %>'></asp:Image><br />
                        <asp:Hyperlink ID="hyperLink" runat="server"  Text='<%# Bind("Name") %>' ></asp:Hyperlink>
                    </ItemTemplate>
   </asp:TemplateField>

更新:我现在遇到的问题是行的大小...这是巨大的,不用内容更新,例如:标题33%,行33%,页脚33%..即使内容标题是gridview的10%..我怎么解决这个问题?

2 个答案:

答案 0 :(得分:1)

您没有Img财产。干净利落。这就是访问它时遇到问题的原因:它不存在。您应该创建属性 AND 填充它。

<强>更新

你应该这样做:

var source = from p in CommentsList
             select new { p.Img, p.Name, p.Comment };
dt.Columns.Add("User");
dt.Columns.Add("Comment");
dt.Columns.Add("Img");

然后这个:

DataRow userDetailsRow=dt.NewRow();
    userDetailsRow["Img"] = item.Img;
    userDetailsRow["User"] = item.Name;

修复适用的位置。

答案 1 :(得分:0)

在DataBinding中使用此列之前,您需要在DataTable中添加名称为Img的列

userDetailsRow["User"] = item.Img;

应该是

userDetailsRow["img"] = item.Img;