C # WPF DataTable переместить пустые ячейки влево - PullRequest
0 голосов
/ 29 августа 2018

У меня есть DataTable, и я хотел бы перебрать ячейки подряд и переместить пустые ячейки влево, чтобы ячейки с данными находились в столбцах справа, а в пустых - слева.

Это потому, что я получаю ячейку до того, как все это делаю, делю ее на запятую и помещаю вторую часть разбиения в ячейку справа от этой ячейки

Так что, если у меня есть пустая ячейка, которая будет после кода, она заполнит пустую ячейку, а не ячейку с данными в

В настоящее время у меня есть этот код, который, кажется, не работает полностью

int rowcount = 0;
numberoftruncationsneeded = 0;
foreach (DataRow row in dt.Rows)
{
    int columncount = 0;
    foreach (var col in row.ItemArray)
    {
        if (dt.Columns[columncount].Caption.Contains("Address"))
        {
            if (dt.Columns.Count > columncount + 1)
            {
                if (dt.Columns[columncount + 1].Caption.Contains("Address"))
                {
                    if (dt.Rows[rowcount].ItemArray[columncount].ToString().Length >= 32)
                    {
                        bool isblank = false;
                        int blankrow = 0;
                        foreach (DataColumn colzer in dt.Columns)
                        {
                            if (colzer.Caption.Contains("Address") && (dt.Columns.IndexOf(colzer) >= columncount))
                            {
                                if (dt.Rows[rowcount].ItemArray[dt.Columns.IndexOf(colzer)].ToString().Trim() == "")
                                {
                                    dt.Rows[rowcount][dt.Columns.IndexOf(colzer)] = dt.Rows[rowcount][dt.Columns.IndexOf(colzer) - 1].ToString();
                                    dt.Rows[rowcount][dt.Columns.IndexOf(colzer) - 1] = "";

                                }
                            }
                        }
                        bool isbad = true;
                        if (isPostCode(dt.Rows[rowcount][columncount + 1].ToString()))
                            isbad = false;
                        string firstaddress = "";
                        string secondaddress = " ";
                        while (isbad == true)
                        {
                            if (firstaddress == "")
                                firstaddress = dt.Rows[rowcount].ItemArray[columncount].ToString();
                            if (!firstaddress.Contains(",") || firstaddress == "")
                            {
                                isbad = false;
                                break;
                            }
                            int lastspace = firstaddress.LastIndexOf(",");
                            var tempsecond = firstaddress.Remove(0, lastspace + 1);
                            firstaddress = firstaddress.Substring(0, lastspace);
                            secondaddress = tempsecond + " " + secondaddress;
                            if (firstaddress.Length < 32)
                                isbad = false;
                        }
                        dt.Rows[rowcount][columncount] = firstaddress;
                        if (firstaddress.Length >= 32)
                            numberoftruncationsneeded++;
                        var temp = dt.Rows[rowcount][columncount + 1];
                        dt.Rows[rowcount][columncount + 1] = secondaddress + "" + temp;
                    }
                }
            }
        }
        columncount++;
    }
    rowcount++;
}

1 Ответ

0 голосов
/ 29 августа 2018

Моя проблема была с циклом столбца.

Я нашел бы пробел и переместил его влево, но тогда программа не знает, как его переместить влево

Чтобы бороться с этим, я делаю петли назад, а не вперед, чтобы сделать это

if(dt.Rows[rowcount].ItemArray[columncount].ToString().Contains(","))
{
  for (int i = dt.Columns.Count - 1; i > columncount + 1; i--)
     {
       if (dt.Columns[i].Caption.Contains("Address"))
        {
          if (dt.Rows[rowcount].ItemArray[i].ToString().Trim() == "")
            {
             dt.Rows[rowcount][i] = dt.Rows[rowcount][i - 1].ToString();
             dt.Rows[rowcount][i - 1] = "";
            }
        }
     }
}

//foreach (DataColumn colzer in dt.Columns)
//{
//    if (colzer.Caption.Contains("Address") && (dt.Columns.IndexOf(colzer) >= columncount))
//    {
//        if (dt.Rows[rowcount].ItemArray[dt.Columns.IndexOf(colzer)].ToString().Trim() == "")
//        {
//            dt.Rows[rowcount][dt.Columns.IndexOf(colzer)] = dt.Rows[rowcount][dt.Columns.IndexOf(colzer) - 1].ToString();
//            dt.Rows[rowcount][dt.Columns.IndexOf(colzer) - 1] = "";
//        }
//    }
//}
...