从 datagridview 列表达式调用自定义方法

发布于 2024-08-22 04:35:34 字数 544 浏览 4 评论 0原文

使用 c#、vs2008 winforms

我有一个 datagridview,我以编程方式绑定到绑定源,该绑定源绑定到带有 1 个表的数据集。

使用 sqlAdaptor 填充数据集后,我想向数据集添加一个新列,并在新列中使用从调用表单中的自定义方法派生的结果填充它。

代码例如如下,但我得到一个“表达式包含未定义的函数调用 this.Test()

是否允许在列的表达式中调用方法,

提前感谢任何帮助 欢呼

this.dsProdOrdLst1.ProdOrder.Columns.Add("sOrderType", typeof(string), 
    "this.Test(order_type)"); // order_type is another column in the dataset

形式类中其他地方的方法

public int Test(int orderType)
{
    return 10; //return a test value
}

using c#, vs2008 winforms

I have a datagridview that i am programtically binding to a binding source, that is bound to a dataset with 1 table.

After filling the dataset using the sqlAdaptor, i want to add a new column to the dataset, and in the new column populate it with a result derived from a call to a custom method in the form.

Code Eg is bellow but i get a "Expression contains undefined function call this.Test()

Is it allowed to call methods as such in the expression of the column

thanks in advance for any help
cheers

this.dsProdOrdLst1.ProdOrder.Columns.Add("sOrderType", typeof(string), 
    "this.Test(order_type)"); // order_type is another column in the dataset

elsewhere in the form class is the method

public int Test(int orderType)
{
    return 10; //return a test value
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

疾风者 2024-08-29 04:35:34

AFAIK,这些表达式(称为 ADO.NET 表达式)没有调用任何类型的用户定义函数的方式。然而,手动填充新列应该是微不足道的:

this.dsProdOrdLst1.ProdOrder.Columns.Add("sOrderType", typeof(string));

foreach (DataRow row in dsProdOrdLst1.ProdOrder.Rows)
{
    row["sOrderType"] = Test((int) row["order_type"]);
}

或者,您可能能够在 ADO.NET 表达式中实现整个函数,但您实际上只想对非常简单的函数执行此操作,否则将会一团糟:

IIF(order_type = 0, 'Mail', IIF(order_type = 1, 'Phone', 'Online'))

< 的文档code>DataColumn.Expression 有一个受支持函数的列表(向下滚动很远才能找到它)。

AFAIK, these expressions (known as ADO.NET expressions) have no way of calling any kind of user defined functions. It should however by trivial to manually populate the new column:

this.dsProdOrdLst1.ProdOrder.Columns.Add("sOrderType", typeof(string));

foreach (DataRow row in dsProdOrdLst1.ProdOrder.Rows)
{
    row["sOrderType"] = Test((int) row["order_type"]);
}

Alternatively, you might be able to implement your entire function in an ADO.NET expression, but you really only want to do this for very simple functions, as otherwise it will be a mess:

IIF(order_type = 0, 'Mail', IIF(order_type = 1, 'Phone', 'Online'))

The documentation of DataColumn.Expression has a list of supported functions (scroll pretty far down to find it).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文