GridView - using CSS-Friendly Control Adapters rem

2020-04-07 04:58发布

As pointed out in the question:

One of the solutions is to disable the addapters for GridView components as specified in this answer

Is there a solution, that would allow to keep the use of CSS-Friendly Control Adapters for GridView and still take advantage of EmptyDataTemplate functionality?

3条回答
Ridiculous、
2楼-- · 2020-04-07 05:12

Add the following to RenderContents in GridViewAdapter.cs right before the ///// BODY //// section /////////////// EmptyDataTemplate ///////////////////////

if (gridView.Rows.Count == 0) {
    //Control[0].Control[0] s/b the EmptyDataTemplate.
    if (gridView.HasControls()) {
        if (gridView.Controls[0].HasControls()) {
            if (gridView.Controls[0].Controls[0] is GridViewRow) {
                rows.Clear();
                rows.Add(gridView.Controls[0].Controls[0]);
                gvrc = new GridViewRowCollection(rows);
                WriteRows(writer, gridView, gvrc, "tfoot");
            }
        }
    }
}   

And add the following to GetRowClass right before return className.Trim();

//// EmptyDataTemplate 
if ((row.RowType & DataControlRowType.EmptyDataRow) == DataControlRowType.EmptyDataRow) {
className += " AspNet-GridView-Empty ";
}

Finally, if you want to override the standard tfoot style, add a CSS section

.AspNet-GridView table tfoot tr.AspNet-GridView-Empty td
{

}
查看更多
兄弟一词,经得起流年.
3楼-- · 2020-04-07 05:16

If you look at the source for the CSS-Friendly adapter for GridView, provided in your link, you will see the following (note the missing else):

private void WriteRows(HtmlTextWriter writer, GridView gridView, GridViewRowCollection rows, string tableSection)
{
    if (rows.Count > 0)
    {

Basically the adapter makes no mention of EmptyDataTemplate or EmptyDataText - it's a simple oversight. Patching it is straightforward though. All you have to do is take the source provided, look at how the original GridView renders it, combine the concepts, and rebuild the original adapter:

case DataControlRowType.EmptyDataRow:
                if (this._emptyDataTemplate == null)
                {
                    container = new TableCell();
                    string emptyDataText = this.EmptyDataText;
                    if (emptyDataText.Length > 0)
                    {
                        container.Text = emptyDataText;
                    }
                    break;
                }
                container = new TableCell();
                template = this._emptyDataTemplate;
                break;
        }
        if (container != null)
        {
            if (columnSpan > 1)
            {
                container.ColumnSpan = columnSpan;
            }
            if (template != null)
            {
                template.InstantiateIn(container);
            }
            row.Cells.Add(container);
        }
查看更多
▲ chillily
4楼-- · 2020-04-07 05:24

Build cssfriendly from source instead of using the download link. Currently the latest is http://cssfriendly.codeplex.com/SourceControl/changeset/changes/24242 and EmptyDataText is working fine for me when I use that source.

查看更多
登录 后发表回答