2015-12-23 16 views
6

Chcę utworzyć widok siatki z kodem. Mój kod to:jak dodać gridview z objectdatasource w kodzie za C#?

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

kod ten nie działa, a jak dodać TemplateField temat:

<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> 

w jaki sposób można to zrobić?

+0

Dlaczego chcesz wygenerować siatkę z kodu? – User2012384

+0

mamy grupę dynamicznie. Potrzebujemy jej – shahroz

+0

Więc czemu nie używać repeatera zamiast ..? – User2012384

Odpowiedz

1
  1. Musisz ustawić DataSourceID własność siatki, nie DataSource.
  2. Nie ma potrzeby uruchamiania metody DataBind() z poziomu ObjectDataSource.
  3. Upewnij się, że oba kontrole ObjectDataSource i GridView zostały dodane na Page.

Spróbuj tego:

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

Według drugiego pytania. Spróbuj wymienić TemplateField przez HyperLinkField. Kliknij przycisk here, aby uzyskać szczegółowe informacje.

Powiązane problemy