DataView Sort

  • Thread starter Thread starter Bill Burris
  • Start date Start date
B

Bill Burris

In the following piece of code from my control, the Sort doesn't work. The
foreach processes the data in the order that it appears in the XML file.

protected override void Render(HtmlTextWriter output)
{
_XmlPath = Page.Request.MapPath( @"content\" + _XmlFileName );
_ds.ReadXml( _XmlPath );
DataView dv = _ds.Tables[0].DefaultView;
dv.Sort = "PagePosition ASC";
foreach( DataRow r in dv.Table.Rows )
{
output.Write( "<hr width='100' color='maroon' SIZE='1'
align='middle'>" );
RenderBook( output, r );
}
output.Write( "<hr width='100' color='maroon' SIZE='1'
align='middle'>" );
}

If I put the following code on a WebForm, the data is sorted properly, but
only 14 rows are displayed, not the whole table.

private void Page_Load(object sender, System.EventArgs e)
{
string XmlPath = Page.Request.MapPath( @"content\csbooks.xml" );
DataSet ds = new DataSet();
ds.ReadXml( XmlPath );
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = "PagePosition ASC";
Repeater1.DataSource = dv;
Repeater1.DataBind();
}

Any ideas for what is going wrong in these 2 pieces of code? In the first
piece of code the sort doesn't work. In the second piece of code only 14
rows are displayed by the Repeater, when there should be 27.

thanks

Bill
 
Al Cadalzo said:
iterate through the data view like so:

foreach(DataRowView drv in dv)
{
DataRow r = drv.Row();
....

}

Thanks Al, that is just what I needed.

I kept looking in the documentation and my books to find something in
DataView. If I had just looked into DataView.Item, I would have discovered
the DataRowView class. All the books I have give examples using DataBind to
bind to a control, but as you see in my second question I also had problems
with that.

The second question: Any ideas for why the Repeater only displays the first
14 rows?

thanks

Bill
--
http://www.componentsnotebook.com/
Bill Burris said:
private void Page_Load(object sender, System.EventArgs e)
{
string XmlPath = Page.Request.MapPath( @"content\csbooks.xml" );
DataSet ds = new DataSet();
ds.ReadXml( XmlPath );
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = "PagePosition ASC";
Repeater1.DataSource = dv;
Repeater1.DataBind();
}
 
Bill,

Put a breakpoint on the DataBind() statement and then examine dv.Count. Is
it = 27?


Bill Burris said:
Al Cadalzo said:
iterate through the data view like so:

foreach(DataRowView drv in dv)
{
DataRow r = drv.Row();
....

}

Thanks Al, that is just what I needed.

I kept looking in the documentation and my books to find something in
DataView. If I had just looked into DataView.Item, I would have discovered
the DataRowView class. All the books I have give examples using DataBind to
bind to a control, but as you see in my second question I also had problems
with that.

The second question: Any ideas for why the Repeater only displays the first
14 rows?

thanks

Bill
--
http://www.componentsnotebook.com/
Bill Burris said:
private void Page_Load(object sender, System.EventArgs e)
{
string XmlPath = Page.Request.MapPath( @"content\csbooks.xml" );
DataSet ds = new DataSet();
ds.ReadXml( XmlPath );
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = "PagePosition ASC";
Repeater1.DataSource = dv;
Repeater1.DataBind();
}
 
Bill,

Since the number of items you're seeing is about half of the total, I'm
wondering if it might have something to do with AlternatingItemTemplate?
Are you specifying both an ItemTemplate and an AlternatingItemTemplate?

Al
 
Thanks Al
Are you specifying both an ItemTemplate and an AlternatingItemTemplate?

That's what the problem was. My AlternatingItemTemplate was just putting an
<hr> between each row. By deleting the AlternatingItemTemplate and putting
the <hr> at the end of the ItemTemplate solved the problem.

Bill
 
Back
Top