2015-09-04 113 views
0

我正在使用C#。截断数据列C#

我有ODBC DSN连接,我带入DataTable。第一列是“分支”。

例子:

BRANCH-----| TYPE-----| ID-----| 

1V--------------| R-----------| ZZ 

1A--------------| R-----------| ZZ 

3---------------| W-----------| VW 

2V--------------| R-----------| VW 

1---------------| R-----------| NI 

4---------------| I-----------| MA 

3B--------------| R-----------| SZ 

我想换一列,因此仅包含第一个字符。

它看起来像这样。

BRANCH-----| TYPE-----| ID-----| 

1---------------| R-----------| ZZ 

1---------------| R-----------| ZZ 

3---------------| W-----------| VW 

2---------------| R-----------| VW 

1---------------| R-----------| NI 

4---------------| I-----------| MA 

3---------------| R-----------| SZ 

请帮助我已经尝试过很多例子,但我无法使它工作。

+0

你应该张贴您试图 –

+0

最后的代码,你试图改变数据给用户的显示器?或者该程序可以访问什么?您是否期望使用DataTable来更新数据库? –

+0

计划将字串连接在一起。 dcUnits.Expression = string.Format(“{0} +''+ {1} +''+ {2}”,“BRANCH”,“TYPE”,“ID”);所以会像1RZZ和3WVW等。 – Infost

回答

1

根据您需要使用表达式创建列,您可以在表达式中使用substring。见MSDN info on DataColumn.Expression

我相信,第一个字符是在指数1

dcUnits.Expression = string.Format("SUBSTRING({0}, 1, 1)+''+{1}+''+{2}", "BRANCH", "TYPE", "ID");

+0

这很完美。谢谢 :) – Infost

0

我用RegEx得到所有的数字,所以如果你有一个两位数的数字,它会工作。如果它不工作,尝试索引号从:行[“分支”]要:通过您的数据表行[0]

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 
using System.Text.RegularExpressions; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DataTable dt = new DataTable(); 
      dt.Columns.Add("BRANCH", typeof(string)); 
      dt.Columns.Add("TYPE", typeof(string)); 
      dt.Columns.Add("ID", typeof(string)); 

      dt.Rows.Add(new object[] { "1V", "R", "ZZ"}); 
      dt.Rows.Add(new object[] { "1A", "R", "ZZ"}); 
      dt.Rows.Add(new object[] { "3", "W", "V"}); 
      dt.Rows.Add(new object[] { "2V", "R", "VW"}); 
      dt.Rows.Add(new object[] { "1", "R", "NI"}); 
      dt.Rows.Add(new object[] { "4", "I", "MA"}); 
      dt.Rows.Add(new object[] { "1B", "R", "SZ"}); 

      foreach (DataRow row in dt.AsEnumerable()) 
      { 
       row["BRANCH"] = Regex.Match(row["BRANCH"].ToString(), "\\d+").Value.ToString(); 
      } 

     } 
    } 
} 
​ 
0

循环并且在每行重置转移值。

 foreach (DataRow row in dt.Rows) 
     { 
      row["BRANCH"] = row["BRANCH"].ToString().Substring(0,1); 
      Console.WriteLine(row["BRANCH"].ToString()); 
     } 

下面是一个完整的工作版本与您提供的资料:https://dotnetfiddle.net/pJzeAO

注:我的复位代码是从以前的答案不同,它其重置为“第一个字”不数值。我相信“第一个字符”就是你在你的问题中所要求的。

两个选项都在那里。使用适合你的情况。希望能帮助到你。

+0

SetField比使用行[i] [j]更清洁一点。你也可以尝试:row.SetField(“BRANCH”,value); –

+0

啊我同意。谢谢。然后我认为他需要将它改为一个for循环,像这样dt.Rows [i] .SetField(column,value); – NKD