Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在将值放入数据表后以大写形式从Excel中的列中获取值_C#_Excel - Fatal编程技术网

C# 如何在将值放入数据表后以大写形式从Excel中的列中获取值

C# 如何在将值放入数据表后以大写形式从Excel中的列中获取值,c#,excel,C#,Excel,在上传excel文件后,我试图获取第18列的值,测试为大写,但没有成功 如何准确地获取数据表中的值 这是我用excel文件中的值填充数据表的地方: using (OleDbDataAdapter adapter = new OleDbDataAdapter(command)) { DataTable dataTable = new DataTable(); adapter.Fill(dataTable);

在上传excel文件后,我试图获取第18列的值,测试为大写,但没有成功

如何准确地获取数据表中的值

这是我用excel文件中的值填充数据表的地方:

 using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
        {
            DataTable dataTable = new DataTable();
            adapter.Fill(dataTable);
            return dataTable;
        }

我希望18中的所有值都是大写。

循环所有行,使第18列数据为大写:

foreach (DataRow row in dataTable.Rows)
{
    row["Test"] = row["Test"].ToString().ToUpper();
}

您可以为DataTable的事件添加事件处理程序

using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
{
    DataTable dataTable = new DataTable();
    dataTable.RowChanged += changedRow;
    adapter.Fill(dataTable);
    return dataTable;
}

void changedRow(object sender, DataRowChangeEventArgs e)
{
     if(e.Action == DataRowAction.Add)
         e.Row[17] = e.Row[17].ToString().ToUpper();
}
可能还应该计划一些关于空值的检查

当然,这可以避免对数据进行第二次循环,因为在Fill调用中加载datatable时将调用此事件。


请注意,您应该使用RowChanged事件,因为RowChanged事件不允许修改行值。此外,我还为列使用了固定索引,因为我不知道您的连接字符串是否包含激活excel工作表第一行中列名的配置。但是,如果列名真的命名为“18”,则可以用字符串“18”替换数字索引。

这也可以用索引来完成。第[17]行=第[17]行。ToString().ToUpper()@oppassum Bui如果在任何情况下列/行索引发生更改,也需要更新代码。使用“column name”更好。同意,但我不能100%确定“Test”实际上是他的列名:-)@MicrosoftDN是的,但我必须使用行[“18”]而不是“Test”,因为“Test”不在表中。非常感谢。可能您的实际列名有所不同。但最好使用列名而不是索引,因为以后索引可能会更改,但列名会经常更改。:)我懒得在晚上11:30尝试它,但是如果(e.Action==DataRowAction.Add)表明您希望在数据填充之外触发此事件,则
是否有可能。成功更改DataTable中DataRow的DataColumn值或RowState后,将调用此事件。并且对于行上的每个可能操作都有许多值。(例如,在fill调用期间,事件将被添加、更改和提交调用3次)关于这一点,有一些感觉是正确的,即此方法得到了优化,但我只是发表了评论,因为这其中有一些感觉不是本能地正确的,即在您完成操作以避免内存泄漏时释放事件对不起,史蒂夫,代码审查习惯。我相信这两种方法都是好的:)如果在Fill方法之外添加其他行,您中的大多数人都希望避免这种行为。但是为什么呢?如果您离开事件处理程序并且该表已被释放,则不会发生内存泄漏。。。。此外,如果在填充之外添加一行,则规则将被删除。第18列应该是大写的,并且应该记住,您有两个或更多的地方可以应用ToUpper代码。使用事件处理程序,您将更加面向对象。好的,感谢您让我了解这一点。。。我更喜欢在我的代码中显式表达。。我想这只是过度炒作: