截断数据字段C#

时间:2015-09-04 16:01:53

标签: 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

请帮助我尝试过很多例子,但是我无法让它发挥作用。

3 个答案:

答案 0 :(得分:1)

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

我相信第一个角色是在索引1

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

答案 1 :(得分:0)

我使用RegEx获取所有数字,所以如果你有一个两位数的数字,它将起作用。如果不起作用,请尝试索引编号From:row [“BRANCH”] To:row [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();
            }

        }
    }
}
​

答案 2 :(得分:0)

循环访问DataTable并重置每行中的BRANCH值。

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

以下是包含您提供的数据的完整工作版本:https://dotnetfiddle.net/pJzeAO

注意:我的重置代码与之前的答案不同,它将其重置为“第一个字符”而非数字值。我相信“第一个角色”就是你在问题中要求的。

两种选择都在那里。使用适合您情况的东西。希望它有所帮助。