I have the following page:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebApplication1._Default" %><%@ Register Assembly="Infragistics2.WebUI.UltraWebGrid.v7.2, Version=7.2.20072.1063, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" Namespace="Infragistics.WebUI.UltraWebGrid" TagPrefix="igtbl" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Untitled Page</title></head><body> <form id="form1" runat="server"> <div> <igtbl:UltraWebGrid ID="UltraWebGrid1" runat="server"> <Bands> <igtbl:UltraGridBand> <Columns> <igtbl:UltraGridColumn IsBound="true" BaseColumnName="x"> <Header Caption="Test" /> </igtbl:UltraGridColumn> </Columns> </igtbl:UltraGridBand> </Bands> <DisplayLayout AutoGenerateColumns="false" /> </igtbl:UltraWebGrid> </div> </form></body></html>
and the following code behind:
Partial Public Class _Default Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not Me.IsPostBack Then Dim odtData As New DataTable() odtData.Columns.Add("x", GetType(Integer)) odtData.Rows.Add(0) Me.UltraWebGrid1.DataSource = odtData Me.UltraWebGrid1.DataBind() End If End SubEnd Class
and when I run this I get "No Data to Display". However, when i use a SqlDataSource and add the "DataSourceID" property to the UltraWebGrid tag instead of binding the data in the code behind, it works. If I replace the UltraWebGrid with the basic ASP.NET DataGrid, it works.
Check out the use of DataTable.NewRow in the following example:
Private Sub AddARow(dataSet As DataSet) Dim table As DataTable = dataSet.Tables("Suppliers") ' Use the NewRow method to create a DataRow 'with the table's schema. Dim newRow As DataRow = table.NewRow() ' Set values in the columns: newRow("CompanyID") = "NewCompanyID" newRow("CompanyName") = "NewCompanyName" ' Add the row to the rows collection. table.Rows.Add(newRow)End Sub
I got that from the example at: http://msdn2.microsoft.com/en-us/library/system.data.datatable.rows.aspx
The issue is not how I set up the data. The actual data I am using in the application I am writing is coming from a SQL Server database. I just created a minimal example that demonstrates the issue. Also, like I said, the exact same code behind works If I use an ASP.NET datagrid -- so the issue is with the WebGrid control, not with the DataTable. However, I have tried using DataTable.NewRow() -- it still does not work. Here is the ASPX markup:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebApplication1._Default" %><%@ Register Assembly="Infragistics2.WebUI.UltraWebGrid.v7.2, Version=7.2.20072.1063, Culture=neutral, PublicKeyToken=7dd5c3163f2cd0cb" Namespace="Infragistics.WebUI.UltraWebGrid" TagPrefix="igtbl" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Untitled Page</title></head><body> <form id="form1" runat="server"> <div> <asp:DataGrid ID="dgTestGrid" runat="server" AutoGenerateColumns="false"> <Columns> <asp:BoundColumn DataField="x" HeaderText="Test" /> </Columns> </asp:DataGrid> <igtbl:UltraWebGrid ID="UltraWebGrid1" runat="server"> <Bands> <igtbl:UltraGridBand> <Columns> <igtbl:UltraGridColumn IsBound="true" BaseColumnName="x"> <Header Caption="Test" /> </igtbl:UltraGridColumn> </Columns> </igtbl:UltraGridBand> </Bands> <DisplayLayout AutoGenerateColumns="false" /> </igtbl:UltraWebGrid> </div> </form></body></html>
And here is the code behind:
Partial Public Class _Default Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not Me.IsPostBack Then Dim odtData As New DataTable() Dim odrRow As DataRow odtData.Columns.Add("x", GetType(Integer)) odrRow = odtData.NewRow() odrRow("x") = 0 odtData.Rows.Add(odrRow) Me.UltraWebGrid1.DataSource = odtData Me.UltraWebGrid1.DataBind() Me.dgTestGrid.DataSource = odtData Me.dgTestGrid.DataBind() End If End SubEnd Class
The ASP.NET datagrid displays a single column with a caption of "Test" and a single row containing "0". The UltraWebGrid displays "No Data To Display".
I did figure out what the problem is, however. In order for the binding to work, the "BaseTableName" property has to be set in the <igtbl:UltraGridBand> tag, and the "TableName" property has to be set on the DataTable. If the TableName property is blank (""), there is no way to do the binding (even setting BaseTableName="" will not cause it to a DataTable with a TableName of "").
Thanks for posting this solution, i also had a similar issue and this helped me resolve my problem.