Удалить столбец в datatable - PullRequest
4 голосов
/ 11 марта 2010

Я успешно экспортирую таблицу данных в таблицу Excel ... В этой таблице Excel мне нужно отобразить столбцы (customerid, Productname, referenceno) таблицы данных, кроме последнего столбца .... теперь как я могу отобразить таблица данных в Excel без отображения последнего столбца (справочно) ...

кто-нибудь подскажет решение этой проблемы .. Заранее спасибо ..

вот мой код для экспорта данных в Excel:

         System.Data.DataTable dt = clsobj.convert_datagrid_orderlist_to_datatable(dvgorderlist, txtreferenceno);

        oxl = new Excel.Application();
        oxl.Visible = true;
        oxl.DisplayAlerts = false;

        wbook = oxl.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
        oxl.ActiveCell.set_Item(2, 4, "Alfa Aesar");

        wsheet = (Excel.Worksheet)wbook.ActiveSheet;

        wsheet.Name = "Customers";
        Excel.Range range = wsheet.get_Range("A6", "H6");

        wsheet.get_Range("A6", "H6").Font.Name = "Times new Roman";
        wsheet.get_Range("A6", "H6").Font.Size = 12;
        wsheet.get_Range("A6", "H6").Interior.Color = ConvertColour(Color.SkyBlue);

        oxl.ActiveWindow.DisplayGridlines = false;

        int rowCount = 5;
        foreach (DataRow dr in dt.Rows)
        {
            rowCount += 1;
            for (int i = 1; i < dt.Columns.Count + 1; i++)
            {
                // Add the header the first time through
                if (rowCount == 7)
                {
                    wsheet.Cells[6, i] = dt.Columns[i - 1].ColumnName;

                }
                wsheet.Cells[rowCount, i] = dr[i - 1].ToString();
                Excel.Range cellRange = (Range)wsheet.Cells[rowCount, i];
                //cellRange.Interior.Color = 200;
                //cellRange.Interior.Color = ConvertColour(Color.LightBlue);
                cellRange.Cells.Borders.LineStyle = BorderStyle.FixedSingle;
            }


        }

        cells = wsheet.get_Range(wsheet.Cells[2, 2],
                      wsheet.Cells[rowCount, dt.Columns.Count]);
        cells.EntireColumn.AutoFit();


        wsheet = null;
        cells = null;

Ответы [ 5 ]

3 голосов
/ 11 марта 2010

В вашем заявлении измените эту строку

 for (int i = 1; i < dt.Columns.Count + 1; i++)

с этим

var filteredColumns = dt.Columns.OfType<DataColumn>()
         .Where( x=> x.ColumnName != "referenceno" );
              foreach (var column in filteredColumns )
{
     //do whatever you want 
             //if you need the index you can create counter and increase it by 1 each loop 
}

не забудьте использовать linq

using System.Linq ;
1 голос
/ 05 октября 2011
foreach (DataColumn dc in dt.Columns)
{
    bool deleteIt = true;
    foreach (StringDictionary sd in sdArray)
    {
        if (dc.ColumnName.Equals(sd["Name"]))
            deleteIt = false;
    }
    if (deleteIt)
        data.Columns.Remove(dc);
}

sdArray содержит все нужные вам столбцы на листе Excel. Если вы предпочитаете, вы можете вместо этого использовать обычный string[]. Я использовал массив StringDictionaries, потому что у меня есть больше информации на строку, например, ширина.

Linq также очень полезен для таких задач, но в приведенном выше примере поддерживается только одна строка. Поэтому я решил, что нам нужно немного разнообразия.

1 голос
/ 11 марта 2010

Вы пробовали

dt.Columns.Remove[dt.Columns.Count - 1];
0 голосов
/ 11 марта 2010

dt.Columns.Remove [ColumnIndex];

Или

dt.Columns.Remove [ "ColumnName"];

попробуй любой ...

0 голосов
/ 11 марта 2010

Попробуйте Worksheet.get_Range("rangeVal", "rangeVal").EntireColumn.Hidden = true;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...