Why do I have to use the STAThread attribute for my main method in my app.?

While the STAThread is required (as the documentation states) and pertinent only to applications that use COM interop, 1.0 version of the .Net framework has some bugs that makes it necessary for you to specify the STAThread attribute: 1) Ole Drag Drop will not work without STA. You can check this by turning on drag and drop in a form and try to run it. 2) Invoking a method in a type using Reflection will not work either. These bugs have however been resolved in the 1.1 version of the framework (Everett). Which means you then do not have to specify this attribute for your main method.

How can I prevent a ComboBox and DataGrid bound to the same DataTable from sharing the same current position

If you have two controls bound to the same datasource, and you do not want them to share the same position, then you must make sure that the BindingContext member of one control differs from the BindingContext member of the other control. If they have the same BindingContext, they will share the same position in the datasource. If you add a ComboBox and a DataGrid to a form, the default behavior is for the BindingContext member of each of the two controls to be set to the Form’s BindingContext. Thus, the default behavior is for the DataGrid and ComboBox to share the same BindingContext, and hence the selection in the ComboBox is synchronized with the current row of the DataGrid. If you do not want this behavior, you should create a new BindingContext member for at least one of the controls. [C#] private void Form1_Load(object sender, System.EventArgs e) { this.myDataTable = GetATable(); //get a datatable somehow… this.dataGrid1.DataSource = myDataTable; //set a new binding context for the combobox this.comboBox1.BindingContext = new BindingContext(); this.comboBox1.DataSource = myDataTable; this.comboBox1.DisplayMember = ‘Col1’; this.comboBox1.ValueMember = ‘Col1’; } [VB.NET] Private Sub Form1_Load(ByVal sender as Object, ByVal e as System.EventArgs) Me.myDataTable = GetATable() ’get a datatable somehow… Me.dataGrid1.DataSource = myDataTable ’set a new binding context for the combobox Me.comboBox1.BindingContext = New BindingContext() Me.comboBox1.DataSource = myDataTable Me.comboBox1.DisplayMember = ‘Col1’ Me.comboBox1.ValueMember = ‘Col1’ End Sub