2010-02-23 2 views
4

с использованием C#, VS2008 WinFormsВызов пользовательского метода из выражения столбца DataGridView

У меня есть 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 
} 

ответ

0

AFAIK, эти выражения (известные как ADO.NET expressions) не имеют способа вызвать какие-либо пользовательские функции. Следует, однако, по тривиальному вручную заполнить новый столбец:

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')) 

документация DataColumn.Expression имеет список поддерживаемых функций (прокручивать довольно далеко вниз, чтобы найти его).

+0

Да, я хотел избежать этого, делая это в выражениях, я думал, что это будет быстрее, чем это будет выполняться в каждой строке, вместо того, чтобы перебирать весь набор данных. Ну неважно, если его невозможно, это невозможно – Spooky2010

Смежные вопросы