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是我的参数。使用上面的代码,传递的值正是SourceColumnID 所具有的: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,那就更好用了。
您的帮助将不胜感激!