只要myDataGrid[1,1]就能表示第二行第二列的数据吗??????

解决方案 »

  1.   

    yes,
    myDataGrid[1,1] 返回的是Object类型,你应转换成你需要的类型
      

  2.   

    谢谢!!!
    不过又有一个问题了~~~~~~~真不好意思 :(
    就是我一开始把许多textbox控件都绑定到了DataSet,当我第一次单击某一行的时候,刚才说得问题解决了,也就是程序下面显示了相应的详细信息,但是当我第二次单击别的行的时候,这些textbox并没有显示出相应的新的信息,我想肯定是绑定的问题,在WebForm只要我进行textBox.DataBind()就可以在此绑定,那在WinForm中怎么进行当数据更新时的在此绑定???
      

  3.   

    在dataGrid1_CurrentCellChanged事件中写代码:
    dataGrid1.CurrentRowIndex=dataGrid1.CurrentCell.RowNumber;
    dataGrid1.Select(dataGrid1.CurrentRowIndex);另,你的textbox绑定的DataSet应和dataGrid1绑定的DataSet是同一个DataSet
      

  4.   

    给我个QQ号码或者MSN吧,现在我的项目急需对ADO.NET的熟练运用,交流一下可以否?
      

  5.   

    我有QQ和MSN,可我从来都不开,告诉你也没什么用。
    有什么事,你可以在CSDN上给我发短消息。
      

  6.   

    我也正在做.net的项目,也刚学没几天,所以,成天泡在CSDN上。
    大家一起互相帮助吧。
      

  7.   

    还是不行啊~~~~
    只有第一次行~~~就第一次我单击datagrid中的行下面会显示详细信息(我写的是DataGrid的Click事件)
    我在statusBar里做了绑定,用它显示我每次单击一行的第一列的数据的值,这是可以的!也就是说显示是没问题,可是就是textbox没有更新,还是第一次的数据,我敢肯定是数据绑定的问题.为什么只有第一次是成功的,后面虽然我要的数据可以输出,但是textbox里并没有更新,有什么办法让他们更新所绑定的数据吗???有什么办法解决?(我的textbox绑定的dataset和datagrid绑定的dataset一样)
      

  8.   

    “(我的textbox绑定的dataset和datagrid绑定的dataset一样)“
    不是一样,应该是同一个。另,textBox.Text的内容和datagrid的CurrentRowIndex同步。
      

  9.   

    我把整个过程和你说说吧:
    有2个表,T1和T2,T1有"A","B","C"3列,T2有"A","D","E","F","G"这几列,T1的
    A列是主键,T2的A列是外键.
    我用DataGrid绑定T1,用来显示简单的信息,然后程序下面用许多textbox来显示T2的信息,因为T1和T2都有A列,所以我要当单击datagrid的某一行时会在下面显示相应这行的详细信息,也就是T2,这里我用了一个存储过程,参数就是
    T1中A列的值,我把这个值传到了T2表的SELECT语句中,于是就可以显示出相应的数据,比如我在T1中选择了第三行,假如第三航的A列的值为opec,那么opec就作为SELECT语句中的where参数,于是下面就输出了opec的详细信息.
    这个dataset有2个表,一个时T1的纯SELECT语句,仅仅是把datagrid与T1绑定,另一个则是存储过程,我把所有的textbox与相对应的T2表中的列相绑定,比如
    txtA就和T2表中的A列绑定.
    还有2个Adapter,第一个是查询用,就是在datagrid中输出数据,第二个是存储过程,就是接收从datagrid中单击某一行传来的数据然后作为参数传到这个存储过程中.
    我编写了datagrid的click事件,要它每单击一次就会传新的参数给存储过程,
    问题就出在这textbox的绑定,他们只显示第一次我单击的数据,而后面无论我单击datagrid中哪一行,他们都不会更新,请问这个该怎么办?
      

  10.   

    你的做法是:(你看我说的对不对)
    T1和T2放在同一个dataSet中,
    t1的选择改变时,从数据库中读出相关信息,填充t2.若是,则在填充t2后用
    textBox1.DataBindings.Add();
    从新绑定textBox1
      

  11.   

    不行,这样会抛出异常,说是不能绑定2个,我一开始已经绑定A列,现在怎么可能再去绑定它.但是有个方法txtA.DataBinds.Clear(),说是可以clear绑定的内容,我试了,我先绑定,然后在clear,那么当在此单击某一行的时候txtA是已没有绑定的状态去绑定的,可是这样它还是没有更新数据,还是只能显示一次!!!!!!!我块疯了/```````````````````
      

  12.   

    不要用DataGrid的Click事件,
    用MouseDown或CurrentCellChanged事件,DataGrid的Click事件和你想象的不一样,
    你设个断点试试,Click事件不是如你所想的执行
      

  13.   

    CMD.Parameters[0].Value=DG[DG.CurrentRowIndex,0].ToString();
    Adapter.Fill(dataset);
    txtUserID.DataBindings.Add("Text",dataset,"T2.UserID");
    txtUserID.DataBindings.Clear();
    这是我编的currentcellchange事件,
    每次单击还只是显示第一次的数据!!!!!!!!!!!!!!!!
    我如果不用clear,那就会出错.
    再不行我把电脑给砸了!!!!!!!!!!!!!!!!!
      

  14.   

    若你将T1和T2一次性全从数据库中读出到dataset中,并在dataset中建立了关系,你可以这样做:txtA.text绑定到dataset-T1.T2.A
    不要绑定到dataset-T2.A即通过关系绑定txtA.text到T1的子表T2的A字段,而不是直接绑定到T2.A以上已通过测试
      

  15.   

    怎么建立关系???要在vs里建立关系吗?主键外键我已将在sqlserver里建立好了.代码里还要做什么???
      

  16.   

    你的代码好像有问题呀,
    CMD是SqlCommand吧?
    Adapter是SqlDataAdapter吧?
    你怎么可以改变CMD,而用没改变的Adapter填充dataset呢?
    这样做,dataset中的数据肯定是不会变的阿!
    不信,你跟踪看看dataset中的数据变了没。
      

  17.   

    我是简略得写啦
    cmd是SqlCommand,AD是SqlDataAdapter
    因为CMD需要一个参出给存储过程,所以要用Paramaters的value给输入参数赋值.
    那么怎么更新Adapter呢?
      

  18.   

    在“解决方案资源管理器“中双击dataset.xsd,
    右建单击表-〉添加-〉新建关系
      

  19.   

    AD.SelectCommand=cmd;
    我没测试,你试一试
      

  20.   

    不行,添加关系没有用~~~~我想也许不需要新建一个关系,我只要T1表中选择的列的值就行,然后把这个值当作参数传给存储过程.
    问题就是这个textbox怎样更新!!!???
    MD搞了一下午了,还是不行~~~~~~~
      

  21.   

    你可以把cmd作的工作全让AD.SelectCommand作,而不用cmd
      

  22.   

    我没有创建cmd啊,用的就是Adapter里的selectcommand啊!!!!!!
    55555555555555555555555555555555555555555555555555555555555555555555555555555555555555~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      

  23.   

    把你的代码贴出来看看,通过关系肯定好使,我以测试通过。
    通过关系的前提是你把T1,T2,一次性全从数据库中读出,而不是跟据T1的选择在从数据库中读出相关的T2行。
      

  24.   

    更新T2,我也测试通过。
    ////////////////////////////////////////////////////////////
    CMD.Parameters[0].Value=DG[DG.CurrentRowIndex,0].ToString();
    Adapter.Fill(dataset);
    txtUserID.DataBindings.Add("Text",dataset,"T2.UserID");
    txtUserID.DataBindings.Clear();
    这是我编的currentcellchange事件,
    每次单击还只是显示第一次的数据!!!!!!!!!!!!!!!!
    我如果不用clear,那就会出错.
    再不行我把电脑给砸了!!!!!!!!!!!!!!!!!
    //////////////////////////////////////////////////////////
    txtUserID.DataBindings.Add("Text",dataset,"T2.UserID");
    txtUserID.DataBindings.Clear();
    是不是写反了?
      

  25.   

    可是我就是要根据T1的选择来输出T2的内容啊~~~~~~~~~
    我不要把所有的内容都一下子输出啊~~~~~~~
    程序需要这么做啊~~~~~~~~~~~
    55555555555~~~~~~~~~~~~~~~~~~~~~~~````````````````
    这是我单击datagrid的代码
    private void DGUserID_CurrentCellChanged(object sender,   System.EventArgs e)
    {
       SearchUserAD.SelectCommand.Parameters[0].Value=DGUserID[DGUserID.CurrentRowIndex,0].ToString();
       SearchUserAD.Fill(QueryUserDS);
    }
    在属性窗口里我都把该绑定都绑定好了
      

  26.   

    private void DGUserID_CurrentCellChanged(object sender,   System.EventArgs e)
    {
    SearchUserAD.SelectCommand.Parameters[0].Value=
           DGUserID[DGUserID.CurrentRowIndex,0].ToString();
    SearchUserAD.Fill(QueryUserDS);
    txtUserID.DataBindings.Clear();
    txtUserID.DataBindings.Add("Text",dataset,"T2.UserID");
    }
      

  27.   

    更正:
    txtUserID.DataBindings.Add("Text",QueryUserDS,"T2.UserID");
      

  28.   

    没用的~~~~~~这个我早试过了,还是只显示第一次的数据!!!!!!!!!
    数据是肯定更新了,我可以用:
    statusBar.Text=SearchUserAD.SelectCommand.Parameters[0].Value
    来获得每次单击的列的值,的确这个是变化的,每次单击不同的行,这个text就显示不同的值.说明代码没问题!
    而问题就是textbox没有更新数据!!!
    (也许你想用txt.Text=SearchUserAD.SelectCommand.Parameters[0].Value
    也可以绑定,可是这样我只能用T1表中的很少的几列,而详细的数据都在T2表里,所以不能用这个方法)
      

  29.   

    SearchUserAD.SelectCommand.Parameters[0].Value更新不代表QueryUserDS更新。
    你单步执行一下,确定QueryUserDS到底改变了么。
      

  30.   

    你也可以这样做:
    private void DGUserID_CurrentCellChanged(object sender,   System.EventArgs e)
    {
    SearchUserAD.SelectCommand.Parameters[0].Value=
           DGUserID[DGUserID.CurrentRowIndex,0].ToString();
    SearchUserAD.Fill(QueryUserDS);
    txtUserID.Text=QueryUserDS.Tables["T2"].Rows[0]["id"].ToString();
    }
    若还不改变,那肯定是QueryUserDS.Tables["T2"]没更新。
      

  31.   

    我需要查看DataSet的哪部分???
    DataSet里好像只可以得到某一行的某一列的列名,可是得不到它的值啊
    比如我第一行的第一列,我只能得到这列的名称,可是得不到第一行第一列的值
      

  32.   

    dataset.Tables["表名"或表号].Rows[行号][列号或列名].ToString()你的问题好像是你没清空QueryUserDS,这样做:private void DGUserID_CurrentCellChanged(object sender,   System.EventArgs e)
    {
    SearchUserAD.SelectCommand.Parameters[0].Value=
           DGUserID[DGUserID.CurrentRowIndex,0].ToString();
    ////////////////////
    QueryUserDS.Clear();
    ///////////////////
    SearchUserAD.Fill(QueryUserDS);
    txtUserID.DataBindings.Clear();
    txtUserID.DataBindings.Add("Text",QueryUserDS,"T2.UserID");
    }
      

  33.   

    若你的t1和t2都放在QueryUserDS中,应这样清空:
    QueryUserDSTables["T2"].Clear();
    下班了,没解决的话,明天继续 :-)
      

  34.   

    yeah~~~~~~~~~~~~~~~~~成功了~~~~~~多谢大哥大哥~!!!!!
    SearchUserAD.SelectCommand.Parameters[0].Value=DGUserID[DGUserID.CurrentRowIndex,0].ToString();
    QueryUserDS.Tables["SearchUser"].Clear();
    SearchUserAD.Fill(QueryUserDS);ok~~~~~~~~~~~~~~给分~~~~~~~~~~~~
    你给我个联系方式吧,我有项目和你研究一下!!!