如何在C#代码后台使用ObjectDataSource添加GridView?

7

我想用代码创建一个GridView,我的代码如下:

 GridView gdvList = new GridView();
 gdvList.ID = "gdvList" ;
 TemplateField tField = new TemplateField();
 BoundField dateBF = new BoundField();
 dateBF.DataField = "Date";
 gdvList.Columns.Add(dateBF);
 BoundField countResponse = new BoundField();
 countResponse.DataField = "CountResponse";
 gdvList.Columns.Add(countResponse);
 ObjectDataSource ods = new ObjectDataSource();
 ods.ID = "ods";
 ods.TypeName = "Project.BLLQuestion";
 ods.SelectMethod = "GetByGroupID";
 ods.SelectParameters["GroupID"] = new Parameter("inGroupID", DbType.Int32, "0");
 ods.DataBind();
 gdvList.DataSource = ods;
 gdvList.DataBind();    

这段代码无法工作,如何添加TemplateField:

<asp:TemplateField ItemStyle-CssClass="GridItemTemplateField">
    <ItemTemplate>
         <a href="Question.aspx?id=<%# Eval("ID")%>"><%# Eval("Content").ToString().PadRight(140).Substring(0,140).TrimEnd()+"..." %></a>
    </ItemTemplate>
</asp:TemplateField>

如何做到呢?


你为什么想要从代码中生成网格? - User2012384
我们需要动态地创建一个组。 - shahroz
那为什么不使用 Repeater 呢? - User2012384
我没有添加所有的代码。 - shahroz
这段代码在哪里运行?是在Page_Load中吗?还是其他地方? - jcc
按钮点击代码。 - shahroz
1个回答

2
  1. 需要设置Grid的DataSourceID属性,而不是DataSource
  2. 不需要运行ObjectDataSourceDataBind()方法。
  3. 确保两个控件ObjectDataSourceGridView都添加到了Page上。

尝试这样做:

  ObjectDataSource ods = new ObjectDataSource();
  ods.ID = "ods";
  ods.TypeName = "Project.BLLQuestion";
  ods.SelectMethod = "GetByGroupID";
  ods.SelectParameters["GroupID"] = new Parameter("inGroupID", DbType.Int32, "0");

  Page.Controls.Add(ods);

  GridView gdvList = new GridView();
  gdvList.ID = "gdvList" ;
  gdvList.DataSourceID = "ods";

  BoundField dateBF = new BoundField();
  dateBF.DataField = "Date";
  gdvList.Columns.Add(dateBF);

  BoundField countResponse = new BoundField();
  countResponse.DataField = "CountResponse";
  gdvList.Columns.Add(countResponse);

  Page.Controls.Add(gdvList);

  gdvList.DataBind(); 

根据你的第二个问题,尝试用HyperLinkField替换TemplateField。点击这里查看详细信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接