Problem with datasource and gridview
I put this as a datasource in my gridView
var source = from p in allComments
         select new {p.Img, p.Name, p.Comment};
          GridView1.DataSource = source;
          GridView1.DataBind();
and i get this:
The DataSourceID of 'GridView1' must be the ID of a control of type IDataSource. 
A control with ID 'SqlDataSource1' could not be found.
My Gridview Markup:
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
        style="z-index: 1; left: 317px; top: 374px; position: absolute; height: 597px; width: 666px" 
       BackColor="#CCCCCC" BorderColor="#999999" 
        BorderWidth="0px" CellPaddin开发者_StackOverflow社区g="4" CellSpacing="2" 
        DataSourceID="SqlDataSource1" ForeColor="Black" AllowPaging="True" 
        onrowdatabound="GridView1_RowDataBound">
 <Columns>
      <asp:TemplateField HeaderText="#">
                        <HeaderStyle Width="500px" />
                         <ItemStyle Width="500px" />
                        <ItemTemplate>
                            <asp:Label ID="lblMessage" runat="server"  Text='<%# Bind("Comment") %>'></asp:Label>
                        </ItemTemplate>
       </asp:TemplateField>
           <asp:TemplateField HeaderText="#">
                        <HeaderStyle Width="100px" />
                          <ItemStyle Width="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>
   </Columns>
      </asp:GridView>
Remove DataSourceID="SqlDataSource1" from the Gridview, as you set the DataSource in Code behind.. 
var source = from p in allComments
select new {p.Img, p.Name, p.Comment};
GridView1.DataSource = source;
GridView1.DataBind();
You can either assign DataSourceID or DataSource, but can't do both.
Edit: Following your comments, you have a problem in Paging, to handle paging you have to to bind the data again.
 protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    var source = from p in allComments
                 select new { p.Img, p.Name, p.Comment };
    GridView1.DataSource = source;
    GridView1.DataBind();
}
You've got the attribute DataSourceID="SqlDataSource1", the error message indicates that there are no SqlDataSource with the Id SqlDataSource1 in your code.
Therefore, you need to remove that attribute in order to bind it from code-behind.
Your Grid-View decleration should look like this instead:
 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    style="z-index: 1; left: 317px; top: 374px; position: absolute; height: 597px; width: 666px" 
    BackColor="#CCCCCC" BorderColor="#999999" 
    BorderWidth="0px" 
    CellPadding="4" CellSpacing="2" 
    ForeColor="Black" AllowPaging="True" 
    onrowdatabound="GridView1_RowDataBound">
You can now Bind the GridView without that issue, you can only have one of them set. Either you bind from code behind using the DataSource-attribute. Or you specify the Attribute DataSourceId.
Remove DataSourceID="SqlDataSource1"
 
         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论