it-swarm.dev

كيفية التحقق من وجود عمود في datatable

لدي datable ولدت مع محتوى ملف CSV. يمكنني استخدام معلومات أخرى لتعيين بعض أعمدة ملف CSV (الآن في datatable) لمعلومات مطلوب من المستخدم تعبئتها.

في أفضل العالم ، سيكون التعيين ممكنًا دائمًا. ولكن هذا ليس حقيقة واقعة ... لذا قبل أن أحاول تعيين قيمة العمود datatable ، سأحتاج إلى التحقق من وجود هذا العمود. إذا لم أقوم بهذا الاختيار ، فلدي ArgumentException.

بالطبع يمكنني التحقق من ذلك مع بعض الرموز مثل هذا:

try
{
    //try to map here.
}
catch (ArgumentException)
{ }

لكن لدي الآن 3 أعمدة لتعيين بعضها أو ربما تكون موجودة أو مفقودة

هل هناك طريقة جيدة للتحقق من وجود عمود في datatable؟

79
Rémi

يمكنك استخدام operator Contains ،

private void ContainColumn(string columnName, DataTable table)
{
    DataColumnCollection columns = table.Columns;        
    if (columns.Contains(columnName))
    {
       ....
    }
}

MSDN - DataColumnCollection.Contains ()

166
Aghilas Yakoub
myDataTable.Columns.Contains("col_name")
64
adinas

بالنسبة إلى أعمدة متعددة ، يمكنك استخدام رمز مشابه للرمز الموضح أدناه. كنت أجد هذا للتو ووجدت إجابة للتحقق من أعمدة متعددة في Datatable.

 private bool IsAllColumnExist(DataTable tableNameToCheck, List<string> columnsNames)
    {
        bool iscolumnExist = true;
        try
        {
            if (null != tableNameToCheck && tableNameToCheck.Columns != null)
            {
                foreach (string columnName in columnsNames)
                {
                    if (!tableNameToCheck.Columns.Contains(columnName))
                    {
                        iscolumnExist = false;
                        break;
                    }
                }
            }
            else
            {
                iscolumnExist = false;
            }
        }            
        catch (Exception ex)
        {

        }
        return iscolumnExist;
    }
8
lokendra jayaswal

يمكنك إلقاء نظرة على خاصية Columns الخاصة بـ DataTable ، إنها قائمة بجميع الأعمدة في الجدول.

private void PrintValues(DataTable table)
{
    foreach(DataRow row in table.Rows)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(row[column]);
        }
    }
}

http://msdn.Microsoft.com/en-us/library/system.data.datatable.columns.aspx

0
asawyer