Reputation: 1299
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.
<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>
</td>
<td>
AAA
</td>
<td>
aaa
</td>
</tr>
<tr class="altrowStandard">
<td>
BBB
</td>
<td>
bbb
</td>
<td runat="server" id="hide1a">
</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">
</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">
</td>
<td runat="server" id="hide3b">
YYY
</td>
<td runat="server" id="hide3c">
yyy
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
<td>
</td>
<td>
CCC
</td>
<td>
ccc
</td>
</tr>
<tr class="altrowStandard">
<td>
</td>
<td>
</td>
<td>
</td>
<td>
DDD
</td>
<td>
ddd
</td>
</tr>
</table>
</div>
After:
<div>
<table class="tableNoPad">
<tr>
<td>
AAA
</td>
<td>
aaa
</td>
<td>
</td>
<td>
AAA
</td>
<td>
aaa
</td>
</tr>
<tr class="altrowStandard">
<td>
BBB
</td>
<td>
bbb
</td>
<td runat="server" id="Td1">
</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">
</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">
</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
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