2015-09-04 75 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