UpdateCommand
首先,我将展示为 a构建自定义的标准方法DataAdapter
(通常在 Select 涉及许多表并且我们不能用来CommandBuilder
为 a 自动构建所有命令时使用DataAdapter
)。
这是我的 DataAdapter 的代码:
SqlDataAdapter myAdapter = new SqlDataAdapter("SELECT ID, Name FROM MyTable", myConnection);
这是UpdateCommand
为myAdapter
. 上面的示例仅涉及 1 个单表,但这只是为了简单和演示目的。
myAdapter.UpdateCommand = new SqlCommand("UPDATE MyTable SET ID=@id,Name=@name WHERE ID=@id2", myConnection);
myAdapter.UpdateCommand.Parameters.Add("id", SqlDbType.VarChar).SourceColumn = "ID";
myAdapter.UpdateCommand.Parameters.Add("name", SqlDbType.VarChar).SourceColumn = "Name";
myAdapter.UpdateCommand.Parameters.Add("id2", SqlDbType.VarChar, 20, "ID").SourceVersion = DataRowVersion.Original;
问题是我不想将 the 完全绑定Parameter
到 a 上SourceColumn
。我想SourceColumn
在将值传递给相应的参数之前稍微更改值。例如,我的 ID 列包含所有值,如 1,2,3,4,... 我想在它之前附加一些字符串(例如:000、001、A、B、C...)并通过这个习惯SourceColumn
是我的参数。使用上面的代码,传递的值正是SourceColumn
ID 所具有的:1,2,3,4... 而我想要的是例如:C1,C2,C3,C4,...
那是使用某个中间层的某种解析值,我想知道这是否可能。解析SourceColumn
外部的值是可以的,但是在某些情况下我必须在UpdateCommand
为我的适配器构建时正确解析它。这是一个案例:
我有一个DataGridView
性别列,该列的类型DataGridViewComboBoxColumn
有 2 个项目:男性和女性。底层数据源应该有一个对应的 Gender 列,值应该是“Male”和“Female”,所有不匹配的值(不包含在 Items 的列表中ComboBoxColumn
)不会使 ComboBoxCell 正确显示值。我试过了CellFormating
,CellPainting
但没有用。CellPainting
太复杂了,CellFormating
根本没用。事实上,我没有使用标准的 .NET DataGridView
,我使用的是自定义DataGridView
(也继承自标准DataGridView
)。我所做的一切都DataGridView
没有奏效。唯一的解决方案是准备所有基础值以仅包含“男性”和“女性”。Gender
列作为布尔/位列。这是选择命令:
SqlDataAdapter myAdapter = new SqlDataAdapter("SELECT ID, Name, CASE WHEN Gender = 1 THEN 'Male' ELSE 'Female' END Gender FROM MyTable", myConnection);
该Gender
列现在是 varchar 或 text 类型,而不是像我以前那样的布尔值/位。但是Gender
原始表中的列是位类型。如何UpdateCommand
为上面的 SELECT 命令构建我的?一个解决方案是包含一个隐藏Gender
列,并使用该列作为 SourceColumn 来构建 UpdateCommand,可见Gender
的只是用于显示。然而,这还有很多工作要做。如果我可以做某种 Custom SourceColumn
,那就更好用了。
您的帮助将不胜感激!