I suggest to use SPListItemCollection
class instead of DataTable
.
Please try:
using (SPSite site = new SPSite("YOUR SITE URL"))
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists.TryGetList("Workflow Tasks");
var query = new SPQuery
{
Query = String.Format("<Where><Eq><FieldRef Name='{0}' /><Value Type='Counter'>{1}</Value></Eq></Where>",
"ID", 3118)
};
var items = list.GetItems(query);
SPListItem item = items[0];
string WorkflowListId = item["WorkflowListId"].ToString();
string WorkflowTaskId = item["WorkflowTaskId"].ToString();
}
Then you can create DataTable
and populate row data from variables(WorkflowListId
, WorkflowTaskId
).
Also you can set ViewFields
property to your query.
This code is working for me:
using (SPSite site = new SPSite("YOUR SITE URL"))
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists.TryGetList("Workflow Tasks");
var query = new SPQuery
{
Query = String.Format("<Where><Eq><FieldRef Name='{0}' /><Value Type='Counter'>{1}</Value></Eq></Where>",
"ID", 3118)
};
query.ViewFields = string.Concat(
"<FieldRef Name='Title' />",
"<FieldRef Name='WorkflowListId' />",
"<FieldRef Name='WorkflowTaskId' />");
var items = list.GetItems(query);
DataTable dt = new DataTable();
dt = items.GetDataTable();
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
string WorkflowListId = row["WorkflowListId"].ToString();
Console.WriteLine(WorkflowListId);
}
}