Displaying information about an order when selection changes
Architecture
One thing that jumps forward is that you're going straight from the UI to your datasource. In a three-layer design (UI, Model, Persistence) or MVC (Model, View, Controller) there is always a layer between the UI and your datasource.
A samplesetup would be this:
interface IOrderRepository {
    IEnumerable&lt;OrderInfo&gt; GetOrderById(int id);
}

class OrderRepository : IOrderRepository {
    public IEnumerable&lt;OrderInfo&gt; GetOrderById(int id){
        using(var context = new MyDataContext()){
            return context.OrderInfo.Include(&quot;Item&quot;).Where(x =&gt; x.OrderID == ID).ToList();
        }
    }
}

class UIController {
    private IOrderRepository _orderRepository;
    
    public void OnOrdersSelectionChanged(DataGridView view){
        _orderRepository.GetOrderById(Convert.ToInt32(dgv[&quot;ID&quot;, dgv.SelectedRows[0].Index].Value));
    }
}

Now your view is coupled loose from your datasource through the intermediate repository. You might be interested in reading up on the repository pattern, for example here.
Resources
I don't see a using statement in your code so I assume that your DataContext is held as a private field. This context class is explicitly made to be disposed after using it once so you should use it as such.
In the MSDN blog I linked just before the repository is disposed instead which is also an option although I have found that wrapping all calls to the DataContext is more often used.
Braces
Always add your braces to your if statements, even when it's just one line. It's simply too easy to make mistakes.
Inline declaration
This snippet
List&lt;OrderInfo&gt; OrderInfo = new List&lt;OrderInfo&gt;();
OrderInfo = c.OrderInfo.Include(&quot;Item&quot;).Where(x =&gt; x.OrderID == ID).ToList();

is an elaborate way of writing
var orderInfo = c.OrderInfo.Include(&quot;Item&quot;).Where(x =&gt; x.OrderID == ID).ToList();

Notice also how I made orderInfo lowercase. Keep naming conventions in mind!