感谢您使用微软产品。DataGrid的重排序是在DataGrid的私有函数ColumnHeaderClicked进行的,ColumnHeaderClicked发生在DataGrid的Click事件之后,因此您无法在DataGrid的Click事件处理程序中得到排序后的结果。要捕捉ColumnHeaderClicked事件有一个方法,就是用Hook(钩子),您可以参考下面这篇文章获取有关在C#中使用钩子的信息:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q318804关于您的问题,使用Hook并不是一种好的选择。在这里我给您提供另外一种方法。建议您不要去动态修改ComboBox的SelectedIndex的值,而是将ComboBox和DataGrid绑定为同一个DataView,如下面这个简单的例子:DataColumn dtCol = null;//Data Column variable
//Create the String array object, initialize the array with the column
//names to be displayed
string[] arrstr ;
arrstr = new string [4];
arrstr[0] = "字段0";
arrstr[1] = "字段1";
arrstr[2] = "字段2";
arrstr[3] = "字段3";//Create the Data Table object which will then be used to hold
//columns and rows
dataTable = new DataTable("Controls");
//Add the string array of columns to the DataColumn object
for(int i=0; i< 4;i++)
{
string str = arrstr[i];
dtCol = new DataColumn(str);
dtCol.DataType = System.Type.GetType("System.String");
dtCol.DefaultValue = "";
dataTable.Columns.Add(dtCol);
}for( int i=0;i<8;i++)
{
DataRow newRow;
newRow = dataTable.NewRow();
newRow[0]=i;
newRow[1]=i*i;
newRow[2]=i*i*i;
newRow[3]=i*i*i*i;
dataTable.Rows.Add(newRow);
}DataView dataView = new DataView(this.dataTable);
this.dataGrid1.DataSource = dataView;this.comboBox1.DataSource = dataView;
this.comboBox1.DisplayMember = "字段1";
this.comboBox1.ValueMember = "字段1";这样当DataGrid的排序改变(也就是DataView的Sort改变),ComboBox当前值也会自动发生变化。不知这样是否能符合您的需求。另外有一个小小的建议,实际上您不需要在帖子上指明请某某人回答,这样可以有更多的技术爱好者(如我们的版主,各位常在这里探讨问题的大侠,以及其他的微软技术工程师)共同来讨论您的问题,也便于您的问题更快的得到解决。您说好么?谢谢您关心和使用微软技术,希望我们携手把技术论坛建设好,让更多的人在这里受益!=====================
- 微软全球技术中心本贴子仅供CSDN的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
======================
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q318804关于您的问题,使用Hook并不是一种好的选择。在这里我给您提供另外一种方法。建议您不要去动态修改ComboBox的SelectedIndex的值,而是将ComboBox和DataGrid绑定为同一个DataView,如下面这个简单的例子:DataColumn dtCol = null;//Data Column variable
//Create the String array object, initialize the array with the column
//names to be displayed
string[] arrstr ;
arrstr = new string [4];
arrstr[0] = "字段0";
arrstr[1] = "字段1";
arrstr[2] = "字段2";
arrstr[3] = "字段3";//Create the Data Table object which will then be used to hold
//columns and rows
dataTable = new DataTable("Controls");
//Add the string array of columns to the DataColumn object
for(int i=0; i< 4;i++)
{
string str = arrstr[i];
dtCol = new DataColumn(str);
dtCol.DataType = System.Type.GetType("System.String");
dtCol.DefaultValue = "";
dataTable.Columns.Add(dtCol);
}for( int i=0;i<8;i++)
{
DataRow newRow;
newRow = dataTable.NewRow();
newRow[0]=i;
newRow[1]=i*i;
newRow[2]=i*i*i;
newRow[3]=i*i*i*i;
dataTable.Rows.Add(newRow);
}DataView dataView = new DataView(this.dataTable);
this.dataGrid1.DataSource = dataView;this.comboBox1.DataSource = dataView;
this.comboBox1.DisplayMember = "字段1";
this.comboBox1.ValueMember = "字段1";这样当DataGrid的排序改变(也就是DataView的Sort改变),ComboBox当前值也会自动发生变化。不知这样是否能符合您的需求。另外有一个小小的建议,实际上您不需要在帖子上指明请某某人回答,这样可以有更多的技术爱好者(如我们的版主,各位常在这里探讨问题的大侠,以及其他的微软技术工程师)共同来讨论您的问题,也便于您的问题更快的得到解决。您说好么?谢谢您关心和使用微软技术,希望我们携手把技术论坛建设好,让更多的人在这里受益!=====================
- 微软全球技术中心本贴子仅供CSDN的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
======================
我也是采用datasource来绑定combobox的,绑定的是部门表,而datagrid里是用户表同部门表关联查询得出的,即用户表只存部门号。这样该怎么办呢?
dgdtblStyle.MappingName = this.dataGrid1.Tables[0].TableName; this.dataGrid1.TableStyles.Add(dgdtblStyle);
GridColumnStylesCollection colStyle;
colStyle = this.dataGrid1.TableStyles[0].GridColumnStyles;
colStyle[0].Width = 0;DataGrid的显示可以通过DataGridTableStyle来控制,但是为了实现您想要的目的,DataGrid和ComboBox的数据源一定要是同一个DataView。您的问题比较具体,可能很难一下子通过这样简单的回答一下子理清。希望能为您开阔一下思路,为您带来一点小小的启发。非常感谢您关心和使用微软技术,很高兴和您交流,希望您的问题早日得到解决!======================
- 微软全球技术中心本贴子仅供CSDN的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
======================