DataView Sort

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
 
B

Bill Burris

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

Al Cadalzo

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

Al Cadalzo

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
 
B

Bill Burris

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Top