Shift data and controls in table (TD) up

I am trying to figure out how to shift some cells (not an entire row) of asp:xxx controls up.

Below is a sample layout (using text) to show how the data is laid out and what I would like it to appear after. This can all be done in code behind on the page load as a condition will be set to either show or hide the 2 rows.

Basically, I need to (conditionally) hide cells XXX xxx YYY and yyy. and shift them up.

Before and After

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .tableNoPad
        {
            padding: 0;
            margin: 0;
            border-style: none;
            width: 100%;
            border-collapse: collapse;
            empty-cells: hide;
        }
        .altrowStandard
        {
            background-color: lightblue;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    Before:
    <div>
        <table class="tableNoPad">
            <tr>
                <td>
                    AAA
                </td>
                <td>
                    aaa
                </td>
                <td>
                    &nbsp;
                </td>
                <td>
                    AAA
                </td>
                <td>
                    aaa
                </td>
            </tr>
            <tr class="altrowStandard">
                <td>
                    BBB
                </td>
                <td>
                    bbb
                </td>
                <td runat="server" id="hide1a">
                    &nbsp;
                </td>
                <td runat="server" id="hide1b">
                    BBB
                </td>
                <td runat="server" id="hide1c">
                    bbb
                </td>
            </tr>
            <tr>
                <td>
                    CCC
                </td>
                <td>
                    ccc
                </td>
                <td id="hide2a" runat="server">
                    &nbsp;
                </td>
                <td runat="server" id="hide2b">
                    XXX
                </td>
                <td runat="server" id="hide2c">
                    xxx
                </td>
            </tr>
            <tr class="altrowStandard">
                <td>
                    DDD
                </td>
                <td>
                    ddd
                </td>
                <td id="hide3a" runat="server">
                    &nbsp;
                </td>
                <td runat="server" id="hide3b">
                    YYY
                </td>
                <td runat="server" id="hide3c">
                    yyy
                </td>
            </tr>
            <tr>
                <td>
                </td>
                <td>
                </td>
                <td>
                    &nbsp;
                </td>
                <td>
                    CCC
                </td>
                <td>
                    ccc
                </td>
            </tr>
            <tr class="altrowStandard">
                <td>
                </td>
                <td>
                </td>
                <td>
                    &nbsp;
                </td>
                <td>
                    DDD
                </td>
                <td>
                    ddd
                </td>
            </tr>
        </table>
    </div>
    After:
    <div>
        <table class="tableNoPad">
            <tr>
                <td>
                    AAA
                </td>
                <td>
                    aaa
                </td>
                <td>
                    &nbsp;
                </td>
                <td>
                    AAA
                </td>
                <td>
                    aaa
                </td>
            </tr>
            <tr class="altrowStandard">
                <td>
                    BBB
                </td>
                <td>
                    bbb
                </td>
                <td runat="server" id="Td1">
                    &nbsp;
                </td>
                <td runat="server" id="Td2">
                    BBB
                </td>
                <td runat="server" id="Td3">
                    bbb
                </td>
            </tr>
            <tr>
                <td>
                    CCC
                </td>
                <td>
                    ccc
                </td>
                <td id="Td4" runat="server">
                    &nbsp;
                </td>
                <td runat="server" id="Td5">
                    CCC
                </td>
                <td runat="server" id="Td6">
                    ccc
                </td>
            </tr>
            <tr class="altrowStandard">
                <td>
                    DDD
                </td>
                <td>
                    ddd
                </td>
                <td id="Td7" runat="server">
                    &nbsp;
                </td>
                <td runat="server" id="Td8">
                    DDD
                </td>
                <td runat="server" id="Td9">
                    ddd
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>

Upvotes: 0

Views: 333

Answers (1)

MoarGbs
MoarGbs

Reputation: 68

One option might be building a DataTable in your code behind and then binding it to a GridView. Add a GridView to the page similar to the following:

<form id="form1" runat="server">
    <asp:GridView runat="server" ID="ExampleGridView" 
                AutoGenerateColumns="true" ShowHeader="false" />
</form>

Then in the page load you can build the DataTable however you want, for example:

protected void Page_Load(object sender, EventArgs e)
{
    DataTable table = new DataTable();
    var condition = false;

    for (int i = 0; i < 4; i++) table.Columns.Add();

    AddArray(table, new string[4] { "AAA", "aaa", "AAA", "aaa" });
    AddArray(table, new string[4] { "BBB", "bbb", "BBB", "bbb" });
    if (condition)
    {
        AddArray(table, new string[4] { "CCC", "ccc", "CCC", "ccc" });
        AddArray(table, new string[4] { "DDD", "ddd", "DDD", "ddd" });
    }
    else
    {
        AddArray(table, new string[4] { "CCC", "ccc", "XXX", "xxx" });
        AddArray(table, new string[4] { "DDD", "ddd", "YYY", "yyy" });
        AddArray(table, new string[4] { "", "", "CCC", "ccc" });
        AddArray(table, new string[4] { "", "", "DDD", "ddd" });
    }
    ExampleGridView.DataSource = table;
    ExampleGridView.DataBind();
}

private void AddArray(DataTable table, string[] items) {
    var row = table.NewRow();
    row.ItemArray = items;
    table.Rows.Add(row);
}

Upvotes: 2

Related Questions