建议你不要用MOUSEDOWN这个事件,它取得的是上一次CELL的行数和列数。最好用CurrentCellChanged事件,下面代码你可以考去试试就知道了。private void dataGrid1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
MessageBox.Show(this.dataGrid1.CurrentCell.RowNumber.ToString());
MessageBox.Show(this.dataGrid1.CurrentCell.ColumnNumber.ToString());
}private void dataGrid1_CurrentCellChanged(object sender, System.EventArgs e)
{
System.Data.DataTable dtTable=new DataTable();
dtTable=(DataTable)this.dataGrid1.DataSource;
MessageBox.Show("ss");
int row=this.dataGrid1.CurrentCell.RowNumber;
int col=this.dataGrid1.CurrentCell.ColumnNumber;
MessageBox.Show(row.ToString());
MessageBox.Show(col.ToString());
MessageBox.Show(dtTable.Rows[row][col].ToString());//这就是你要取的值
}OK~

解决方案 »

  1.   

    没错,最要用CurrentCellChanged事件。
    而且取数据是从DataGrid的数据源中去取。
      

  2.   

    我试过了,其中有一句是dtTable=(DataTable)this.dataGrid1.DataSource,系统报告转换无效
      

  3.   

    dataGrid1.DataSource的类型应该是DataView,不是DataTable
      

  4.   

    dataGrid1.DataSource是object类,而不是dataview,
      

  5.   

    在你的这个文件开头要引入名域:using System.Data;
    如果没有引入:则用
    dtTable=(System.Data.DataTable)this.dataGrid1.DataSource还有,你的dataGrid1的数据源在最初时指定没有?比如:
    private void Form2_Load(object sender, System.EventArgs e)
    {
    this.sqlDataAdapter1.Fill(this.dataSet1);
    this.dataGrid1.DataSource = this.dataSet1.Tables[0];
    }
      

  6.   

    在你的这个文件开头要引入名域:using System.Data;
    如果没有引入:则用
    dtTable=(System.Data.DataTable)this.dataGrid1.DataSource还有,你的dataGrid1的数据源在最初时指定没有?比如:
    private void Form2_Load(object sender, System.EventArgs e)
    {
    this.sqlDataAdapter1.Fill(this.dataSet1);
    this.dataGrid1.DataSource = this.dataSet1.Tables[0];
    }
      

  7.   

    DATAGRID的DATASOURCE指定为DATATABLE也不会错。绝对!
    如果你有兴趣操作DATAVIEW,那么在Form2_Load里面可以为它指定:this.dtv=new DataView(this.dataSet1.Tables[0]);
    this.dataGrid1.DataSource = dtv;当然要先申明dtv:
    private System.Data.DataView dtv
      

  8.   

    to bkss:你所说的,我都已经写了,系统还是说指定的转换无效
      

  9.   

    datasource是object类型,强制转换没用
      

  10.   

    this.dataGrid1.DataSource=this.dataSet1.Tables["tablename"];
    这样的话在grid里面只显示tablename这一张表
    this.dataGrid1.DataSource=this.dataset1;
    这样datagrid以树的形式显示dtaset1里面所有的表
    DataSource支持的类型很多,dataset,dataview,datatable,找找msdn,介绍很详细
      

  11.   

    在用da的fill()方法生成dataset的时候可以:
    da.fill(DataSet1,"abcd");
    然后改变da的SelectCommand,再次使用fill()
    da.fill(Dataset1,"efgh");
    这里的"abcd"和"efgh"是两个表,就是上面贴子的tablename
    调用的时候可以:dataset1.Tables["abcd"],也可以dataset1.Tables[0]