'Reordering Multilevel Number in ASP.NET C#
DataTable columns selected from SQL as following:
| id | level_0 | level_1 | level_2 | description |
|---|---|---|---|---|
| 114 | 1 | 0 | 0 | description 1 |
| 115 | 1 | 1 | 0 | description 2 |
| 116 | 1 | 1 | 1 | description 3 |
| 117 | 1 | 1 | 2 | description 4 |
and so on...
A list of multilevel number displayed in the user interface as following from datatable
1.0.0 description 1
1.1.0 description 2
1.1.1 description 3
1.1.2 description 4
1.1.3 description 5
1.2.0 description 6
1.2.1 description 7
1.2.2 description 8
1.2.3 description 9
1.2.4 description 10
1.3.0 description 11
1.3.1 description 12
2.0.0 description 13
2.1.0 description 14
2.2.0 description 15
3.0.0 description 16
3.1.0 description 17
... and so on
If the user deleting these items: 1.1.2, 1.2.2, 2.0.0, 2.1.0, 2.2.0, my current result will be:
1.0.0 description 1
1.1.0 description 2
1.1.1 description 3
1.1.3 description 5
1.2.0 description 6
1.2.1 description 7
1.2.3 description 9
1.2.4 description 10
1.3.0 description 11
1.3.1 description 12
3.0.0 description 16
3.1.0 description 17
Expected output:
1.0.0 description 1
1.1.0 description 2
1.1.1 description 3
1.1.2 description 5
1.2.0 description 6
1.2.1 description 7
1.2.2 description 9
1.2.3 description 10
1.3.0 description 11
1.3.1 description 12
2.0.0 description 16
2.1.0 description 17
May I know, how to write the code behind ASP.NET C# or VB.NET code to reordering my multi-level numbering after user deleted some wrong items, by updating my data table multilevel number to the correct one in the expected output?
Solution 1:[1]
Assuming you don't mind being tied to having 3 levels in your code, you just need to setup a 3 level counter and then reset each level when the original level changes to renumber every item:
int level0 = 1, level1 = 0, level2 = 0;
var firstRow = dt.Rows[0];
int curLevel0 = firstRow.Field<int>("level_0"), curLevel1 = firstRow.Field<int>("level_1");
foreach (var row in dt.AsEnumerable()) {
if (row.Field<int>("level_0") != curLevel0) {
curLevel0 = row.Field<int>("level_0");
curLevel1 = row.Field<int>("level_1");
++level0;
level1 = 0;
level2 = 0;
}
if (row.Field<int>("level_0") != level0)
row["level_0"] = level0;
if (row.Field<int>("level_1") != curLevel1) {
curLevel1 = row.Field<int>("level_1");
++level1;
level2 = 0;
}
if (row.Field<int>("level_1") != level1)
row["level_1"] = level1;
if (row.Field<int>("level_2") != level2)
row["level_2"] = level2;
++level2;
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | NetMage |
