简体   繁体   中英

check for an particular column name in datatable

foreach (DataColumn dc in dtNewTable.Columns)
{     
    if(dtNewTable.ColumnName[18]="MONTH")
    {
        dc.DataType = typeof(string);
    }
}

here i need tio check for an particular columnname if that columnname is "MONTH" then change its datatype to string

can anyone tell me the syntax for it.

You were on the right track...

foreach (DataColumn dc in dtNewTable.Columns) 
{
      if(dc.ColumnName == "MONTH")
      {
           dc.DataType = typeof(string);
      }
}
foreach (DataColumn dc in dtNewTable.Columns)
{
    if (dc.ColumnName == "MONTH")
    {
        dc.DataType = typeof(String);
    }
}

Try

if(dc.ColumnName =="MONTH")
{
  dc.DataType = typeof(String);
}

Try this

if (dt.Columns.Contains("MONTH"))
    dt.Columns["MONTH"].DataType = yourDesiredDataTypeHere;
    /// <summary>
    /// Returns true if the given DataTable has the given column name
    /// </summary>
    /// <param name="data">The DataTable you are checking</param>
    /// <param name="columnName">the column name you want</param>
    /// <returns></returns>
    public static bool HasColumn(DataTable data, string columnName)
    {
        if(data == null || string.IsNullOrEmpty(columnName))
        {
            return false;
        }

        foreach(DataColumn column in data.Columns) 
             if (columnName.Equals(column.ColumnName, StringComparison.OrdinalIgnoreCase)) return true;
        return false;
    }

We cast the DataColumnCollection to an IEnumerable, filter out only the columns that match your criteria, and then mass change the resulting column's datatype. While this maybe over kill when trying to find a single instance, I'm a sucker for LINQ.

 dtNewTable.Columns.Cast<DataColumn>()
            .Where(x => x.ColumnName.ToLower() == "month")
            .Select(x => { x.DataType = typeof(string); return x; }).ToList();

If you have data in the DataTable you will need to copy the data to new column that has the expected data type.

using System;
using System.Data;

namespace WindowsFormsApplication1
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Month", typeof(int));
            dt.Rows.Add(1);

            if (dt.Columns.Contains("Month"))
            {
                DataColumn originalDataColumn = dt.Columns["Month"];
                DataColumn newDataColumn = dt.Columns.Add("NewMonth", typeof(string));

                foreach (DataRow dr in dt.Rows)
                {
                    dr[newDataColumn] = dr[originalDataColumn].ToString();
                }

                dt.Columns.Remove(originalDataColumn);
                newDataColumn.ColumnName = "Month";
            }
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM