C#WPF DataTable将空单元格向左移动

时间:2018-08-29 07:33:35

标签: c# wpf datatable cell

我有一个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 :(得分:0)

我的问题是列循环。

Id找到一个空白并将其向左移动一个,但是程序不知道将其向左移动

为了解决这个问题,我这样做是倒退而不是前进

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] = "";
//        }
//    }
//}