- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下问题。我将值作为 XML(如字符串)进行传递,并且不会为数字列传递默认值,例如 false 或 0。因此,我创建了一个字典,其中键是列名,值是传递的值。
这是我当前的代码
foreach (KeyValuePair<String, String> kvp in rowValues)
{
String passedValue = kvp.Value.Trim();
String rowValue = bookingRow[kvp.Key].ToString().Trim();
if (passedValue != rowValue)
{
// code here
}
}
问题出在默认值上。通过调试我的测试用例,我可以看到 passedValue 为空,rowValue 为 0(列为整数类型)。所以,我的问题是——我应该如何重写上面的代码以正确地将我传递的值转换为列的类型。换句话说,我不需要将它们都转换为字符串,而是需要将传递的值转换为正确类型的 DataRow 列。
传递值的示例 - “”。
rowValue = ""的示例(具有列长度的空字符串)
或者另一个例子:
passedValue = ""的示例
对应rowValue = 0(表中值为Integer)
这两种情况都应视为相同的值 - 无需写入历史记录。
感谢您的回答,我现在正在测试这段代码:
String passedValue = kvp.Value.Trim();
var rowValue = bookingRow[kvp.Key];
if (Convert.ChangeType(passedValue, rowValue.GetType()) != rowValue)
{
String rowValueString = rowValue.ToString().Trim();
if (rowValueString!=passedValue) // Double check to prevent cases of "" vs. " "
this.SaveToBookingHistory(booking_id, "M", kvp.Key, rowValueString, passedValue, ref messageText, ref statusCode);
}
最佳答案
我没有你所有的代码,所以这可能不完全正确;但你应该能够做这样的事情......
foreach (KeyValuePair<String, String> kvp in rowValues)
{
var rowValue = bookingRow[kvp.Key];
var passedValue = Convert.ChangeType(kvp.Value.Trim(), bookingRow[kvp.Key].GetType());
// or, if your bookingRow comes from a table
var passedValue = Convert.ChangeType(kvp.Value.Trim(), table.Columns[kvp.Key].DataType);
if (passedValue.Equals(rowValue) == false)
{
// code here
}
}
编辑:您将遇到一些问题。您需要使用 .Equals 方法(我更改了上面的代码),因为 ChangeType 返回一个对象;和 != 进行引用比较。这将处理 rowValue 为 0 且 passedValue 为 0 装箱为对象的情况。
但是,这不会解决您有 ""和 ""的情况。这两件事不一样,也不相等;而且,如果不检查它们是字符串的值,您将不知道。因此,我建议您编写一些函数来手动执行比较。
关于c# - DataRow 列和字符串值比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17558617/
我有一个扩展DataRow的类: import org.jdesktop.dataset.DataRow; public class MainDataRow extends DataRow { p
查看下面的代码块, DataTable _table = new DataTable(); //1) Why I need to Convert DataRow again into DataRow
我的代码: DataRow[] row = ByTotalTemplate.Select("TEMPLATE_ID=" + DisTemplateID); 一行包含TEMPLATE_ID、MIN_AM
使用这段代码: OracleDataTable dt = PlatypusSchedData.GetAvailablePlatypi(); OracleDataTable outputDt = new
假设我从多个线程访问一个DataTable。如果我想访问特定行,我怀疑我需要锁定该操作(我可能对此有误,但至少我知道这样我是安全的): // this is a strongly-typed tabl
我收到这个错误 "Error 8 Cannot implicitly convert type 'System.Collections.Generic.List' to 'System.Coll
我有很多如下形式的代码: // assume that MyDataRow is a datarow from a typed dataset and has a property called So
在我的表中,有数据行注释,它存储为文本数据类型。 我有 Datarow idPersonalstamm,它存储为 int。 我的问题是,有时来自 Personalstamm 的数据会被复制到评论中。
我正在尝试将文本框中的新词添加到表格中: private void addAnswer_Click(object sender, EventArgs e) { // Get a new row
我的模块中有一个 cmdlet,它从数据库表中返回一组通用 DataRows,其名称由 -Name 指定。范围 # this returns a collection of datarows from
我在此代码行中得到一个空引用: **DataRow dr = tableSelectedItems.NewRow();** 我不知道为什么。谁能帮帮我吗?我的代码应该填写用户在数据列表中选择的书籍。
我尝试将值从自定义集合传递给 DataRow 类型变量,如下面的代码: GridHitInfo downHitInfo = null; DataRow row = gridView3.GetDataR
我正在尝试比较循环中的两个 DataRow。但是,以下 if 语句不会返回 true: if (dt1.Rows[0]["Name"] == dt2.Rows[b]["Name"]) { //
我在一个网站工作。我无法转换表格中行[""] 中的数值。我的代码是: public partial class bought : System.Web.UI.Page { protected
每当我在 MySql 中运行此查询时,它总是返回 3 行具有相同 ID,但记录不同的行,但在我的代码中,它只返回 1 行。 这是我的代码: public DataTable DBSelect(stri
我有以下问题。我将值作为 XML(如字符串)进行传递,并且不会为数字列传递默认值,例如 false 或 0。因此,我创建了一个字典,其中键是列名,值是传递的值。 这是我当前的代码 foreach (K
我正在尝试将 DataTable 中的所有 DateTime 值转换为字符串。这是我使用的方法: private static void ConvertDateTimesToStrings(DataT
我明白了: DataTable dtEntity = CreateDataTable(); drEntity = dtEntity.NewRow(); 然后我将数据添加到该行(或不添加)。一大堆代
我遇到了 DataRow 的问题,这让我很头疼。 使用 OleDbConnection 从 Excel 电子表格中读取数据行。 如果我尝试使用列名从 DataRow 中选择数据,即使那里有数据,它也会
我正在尝试编写一个单元测试来比较两个数组。我已经定义了单元测试: [DataTestMethod] [DataRow( new[] { "COM3", "COM1", "COM2" },
我是一名优秀的程序员,十分优秀!