有人可以帮我吗?
我有一个从数据库填充的数据表'dt'。 我的dt有两列,我需要对其进行子字符串化。我想在特定字符(=)之后切掉字符。并将其推回我的dt。
我一直在尝试不同的方法,但是没有任何效果。我确定我缺少什么。
private DataTable MyTableWhenExport(DataTable dt) {
if (dt != null && dt.Rows.Count > 0) {
(dt.Columns["MyColumn"]) = dt["yMyColumn"]
.Substring(0, dt["MyColumn"].LastIndexOf("=") + 1); // My substring code here
}
return dt;
}
有人可以帮我吗
答案 0 :(得分:1)
您可以使用
string firstPart = theString.Split('=')[0];
检索=
之前的部分。如果字符串不包含等号,则返回整个字符串。
如果字符串可以为null
,请使用
string firstPart = theString?.Split('=')[0];
您必须访问DataTable
的行。 dt.Columns
仅包含列定义(如标题),而不包含实际单元格值。
DataRow row = dt.Rows[0];
string oldValue = (string)row["MyColumn"]; // Returns an object. Therefore cast to string.
row["MyColumn"] = oldValue?.Split('=')[0];
答案 1 :(得分:0)
您已经拥有什么代码?
我想您需要类似的东西:
dt["yourColumn"] = dt["yourColumn"].Substring(0, dt["yourColumn"].LastIndexOf("=") + 1);
祝你好运!
编辑: 抱歉,我上面的答案是完全错误的!我使用数据集和数据表已经很长时间了(Entity Framework使其过时了)。 您首先需要引用要修改的行,然后引用列(即字段)。
类似的东西:
dt[0]["yourColumn"] = dt[0]["yourColumn"].Substring(0, dt[0]["yourColumn"].LastIndexOf("=") + 1);
0是要更改的行的索引。
答案 2 :(得分:0)
如果要对表中的每一行执行此操作,则必须执行以下操作:
DataTable MyTableWhenExport(DataTable dt)
{
// insert argument checking here
foreach (var dataRow in dt.AsEnumerable())
{
var value = dataRow.Field<string>("MyColumn");
if (string.IsNullOrWhitespace(value))
{
// handle accordingly
}
else
{
value = value.Substring(0, value.LastIndexOf('=') + 1);
dataRow.SetField("MyColumn", value);
}
}
return dt;
}
请注意,您无法通过直接索引DataTable
来访问行值。
此外,此答案还假定您可以使用LINQ。
请注意,如果字符串中可能不包含=
,则LastIndexOf
将返回-1
。我还没有测试过,但是看起来那种情况下内容会被截断(如果Substring
不希望您请求长度为0的子字符串,则会抛出异常。我不记得了)