Solved

How to access gridview DataRow field to conditionally set Gridview Header field

Posted on 2011-09-06
2
502 Views
Last Modified: 2013-11-26
I have a gridview.  One of my dataRow fields holds either an "H" or a "D" value to indicate "Hours" or "Days".    I want to display "Hours" or "Days" in the header based on the dataRow field value.

Is there a way to determine the value of the dataRow field when the gridview is processing the Header row?  

 if (e.Row.RowType == DataControlRowType.Header)
            {
                if (e.Row.Cells[2].Text.Contains("H"))  This is the datarow field value I'm trying to access (this doesn't work)

0
Comment
Question by:ppeterso
2 Comments
 
LVL 28

Expert Comment

by:strickdd
ID: 36491146
1. create an OnDataBound event for the gridview.
2. Then, assuming all no row can have an "H" when another row contains a "D", look at the first row
3. If the first row has an "H" change the gridview header row column
4. Do the same if the row has a "D"
0
 
LVL 17

Accepted Solution

by:
Carlos Villegas earned 250 total points
ID: 36491772
Hello, assuming that your GridView DataSource is a DataTable object I did this example for you:
<%@ Import Namespace="System.Data" %>

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    Random rnd = new Random();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // Default show hours data.
            Button1_Click(this, e);
        }
    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            DataTable dtt = GridView1.DataSource as DataTable;
            if (dtt != null && dtt.Rows.Count > 0)
            {
                if (dtt.Rows[0]["ColumnB"].ToString().Equals("H"))
                    e.Row.Cells[0].Text = "Hours";
                else
                    e.Row.Cells[0].Text = "Days";

                return;
            }
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        // Show hours data.
        BindMyData(true);
    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        // Show days data.
        BindMyData(false);
    }

    void BindMyData(bool hours)
    {
        DataTable dtt = new DataTable();
        dtt.Columns.Add("ColumnA", typeof(int));
        dtt.Columns.Add("ColumnB", typeof(string));

        for (int i = 0; i < 12; i++)
        {
            dtt.Rows.Add(rnd.Next(1, 120), hours ? "H" : "D");
        }

        GridView1.DataSource = dtt;
        GridView1.DataBind();
    }

</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound">
            <Columns>
                <asp:BoundField DataField="ColumnA" />
                <asp:BoundField DataField="ColumnB" />
            </Columns>
        </asp:GridView>
        <asp:Button ID="Button1" runat="server" Text="Show Hours Data" OnClick="Button1_Click" />
        <br />
        <asp:Button ID="Button2" runat="server" Text="Show Days Data" OnClick="Button2_Click" />
        <br />
    </div>
    </form>
</body>
</html>

Open in new window


You can download the full aspx file from this link:
http://dl.dropbox.com/u/13237304/EE/CustomGridView.zip

I hope this helps.
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Hi friends,  in this video  I'll show you how new windows 10 user can learn the using of windows 10. Thank you.
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now