Erwin, a modeling consultant and top Solver Foundation user, encountered some problems trying to do two-way data binding using DataTable objects. There are more details on this discussion thread. Ross, a member of the Solver Foundation team, was kind enough to code up a workaround for Erwin's example. In addition to this CS file, you will need to create a new DBML file called SampleDataContext, as I described in a previous post.
using System; using System.Collections.Generic; using System.Linq; using System.Data; using System.Data.OleDb; using System.Data.Linq; using System.Text; using Microsoft.SolverFoundation.Services; using System.IO; namespace OML1 { class Test { static void Main(string[] args) { Test t = new Test(); t.Solve(); } // Holds the OML model string strModel = @"Model[ Parameters[Sets,I], Parameters[Reals,p[I]], Decisions[Reals[0,Infinity],x[I]], Constraints[ Foreach[{i,I}, x[i]==p[i]] ] ]"; // SFS SolverContext context; SampleDataContext data; // Constructor public Test() { context = SolverContext.GetContext(); data = new SampleDataContext("Data Source=Sql_server_name;Initial Catalog=DataPartitionAllocation20_5;Integrated Security=True"); context.DataSource = data; } // Solve the problem public void Solve() { context.LoadModel(FileFormat.OML, new StringReader(strModel)); Parameter p = context.CurrentModel.Parameters.First(q => q.Name == "p"); p.SetBinding(data.P, "value", new string[] { "index" }); Decision x = context.CurrentModel.Decisions.First(d => d.Name == "x"); x.SetBinding(data.X, "value", new string[] { "index" }); Solution solution = context.Solve(); Console.Write("{0}", solution.GetReport()); context.PropagateDecisions(); } } }