只要myDataGrid[1,1]就能表示第二行第二列的数据吗??????
解决方案 »
- OWC11在Office2007和2010中的问题
- C#中向OCX中传递数组,过大的话,总出现内存读写问题
- 急!串口通信的正则表达式问题,在线等
- dateTimePicker控件怎么赋空值啊?
- 我连接的是user这个库,现在我又想操作data这个库,在sql里面一般都是“data..表名”撒,我想请教大家的是在oracle里应该怎么写,请高手
- 在c#中多个线程之间如何通过收发消息来通信
- 使用[sysimport(dll="user32.dll")],要引入什么命名空间啊?
- 请教一个窗口dialogresult返回结果的问题
- 微软的工程师在不在,有个问题需要跟你们讨论
- c#文件路径中的空格会被转换成%20
- 非静态的字段、方法或属性“test.Class1.find_x(test.Pdtype, int)”要求对象引用
- 递归的一个问题,入门的说
myDataGrid[1,1] 返回的是Object类型,你应转换成你需要的类型
不过又有一个问题了~~~~~~~真不好意思 :(
就是我一开始把许多textbox控件都绑定到了DataSet,当我第一次单击某一行的时候,刚才说得问题解决了,也就是程序下面显示了相应的详细信息,但是当我第二次单击别的行的时候,这些textbox并没有显示出相应的新的信息,我想肯定是绑定的问题,在WebForm只要我进行textBox.DataBind()就可以在此绑定,那在WinForm中怎么进行当数据更新时的在此绑定???
dataGrid1.CurrentRowIndex=dataGrid1.CurrentCell.RowNumber;
dataGrid1.Select(dataGrid1.CurrentRowIndex);另,你的textbox绑定的DataSet应和dataGrid1绑定的DataSet是同一个DataSet
有什么事,你可以在CSDN上给我发短消息。
大家一起互相帮助吧。
只有第一次行~~~就第一次我单击datagrid中的行下面会显示详细信息(我写的是DataGrid的Click事件)
我在statusBar里做了绑定,用它显示我每次单击一行的第一列的数据的值,这是可以的!也就是说显示是没问题,可是就是textbox没有更新,还是第一次的数据,我敢肯定是数据绑定的问题.为什么只有第一次是成功的,后面虽然我要的数据可以输出,但是textbox里并没有更新,有什么办法让他们更新所绑定的数据吗???有什么办法解决?(我的textbox绑定的dataset和datagrid绑定的dataset一样)
不是一样,应该是同一个。另,textBox.Text的内容和datagrid的CurrentRowIndex同步。
有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中哪一行,他们都不会更新,请问这个该怎么办?
T1和T2放在同一个dataSet中,
t1的选择改变时,从数据库中读出相关信息,填充t2.若是,则在填充t2后用
textBox1.DataBindings.Add();
从新绑定textBox1
用MouseDown或CurrentCellChanged事件,DataGrid的Click事件和你想象的不一样,
你设个断点试试,Click事件不是如你所想的执行
Adapter.Fill(dataset);
txtUserID.DataBindings.Add("Text",dataset,"T2.UserID");
txtUserID.DataBindings.Clear();
这是我编的currentcellchange事件,
每次单击还只是显示第一次的数据!!!!!!!!!!!!!!!!
我如果不用clear,那就会出错.
再不行我把电脑给砸了!!!!!!!!!!!!!!!!!
不要绑定到dataset-T2.A即通过关系绑定txtA.text到T1的子表T2的A字段,而不是直接绑定到T2.A以上已通过测试
CMD是SqlCommand吧?
Adapter是SqlDataAdapter吧?
你怎么可以改变CMD,而用没改变的Adapter填充dataset呢?
这样做,dataset中的数据肯定是不会变的阿!
不信,你跟踪看看dataset中的数据变了没。
cmd是SqlCommand,AD是SqlDataAdapter
因为CMD需要一个参出给存储过程,所以要用Paramaters的value给输入参数赋值.
那么怎么更新Adapter呢?
右建单击表-〉添加-〉新建关系
我没测试,你试一试
问题就是这个textbox怎样更新!!!???
MD搞了一下午了,还是不行~~~~~~~
55555555555555555555555555555555555555555555555555555555555555555555555555555555555555~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
通过关系的前提是你把T1,T2,一次性全从数据库中读出,而不是跟据T1的选择在从数据库中读出相关的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();
是不是写反了?
我不要把所有的内容都一下子输出啊~~~~~~~
程序需要这么做啊~~~~~~~~~~~
55555555555~~~~~~~~~~~~~~~~~~~~~~~````````````````
这是我单击datagrid的代码
private void DGUserID_CurrentCellChanged(object sender, System.EventArgs e)
{
SearchUserAD.SelectCommand.Parameters[0].Value=DGUserID[DGUserID.CurrentRowIndex,0].ToString();
SearchUserAD.Fill(QueryUserDS);
}
在属性窗口里我都把该绑定都绑定好了
{
SearchUserAD.SelectCommand.Parameters[0].Value=
DGUserID[DGUserID.CurrentRowIndex,0].ToString();
SearchUserAD.Fill(QueryUserDS);
txtUserID.DataBindings.Clear();
txtUserID.DataBindings.Add("Text",dataset,"T2.UserID");
}
txtUserID.DataBindings.Add("Text",QueryUserDS,"T2.UserID");
数据是肯定更新了,我可以用:
statusBar.Text=SearchUserAD.SelectCommand.Parameters[0].Value
来获得每次单击的列的值,的确这个是变化的,每次单击不同的行,这个text就显示不同的值.说明代码没问题!
而问题就是textbox没有更新数据!!!
(也许你想用txt.Text=SearchUserAD.SelectCommand.Parameters[0].Value
也可以绑定,可是这样我只能用T1表中的很少的几列,而详细的数据都在T2表里,所以不能用这个方法)
你单步执行一下,确定QueryUserDS到底改变了么。
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"]没更新。
DataSet里好像只可以得到某一行的某一列的列名,可是得不到它的值啊
比如我第一行的第一列,我只能得到这列的名称,可是得不到第一行第一列的值
{
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");
}
QueryUserDSTables["T2"].Clear();
下班了,没解决的话,明天继续 :-)
SearchUserAD.SelectCommand.Parameters[0].Value=DGUserID[DGUserID.CurrentRowIndex,0].ToString();
QueryUserDS.Tables["SearchUser"].Clear();
SearchUserAD.Fill(QueryUserDS);ok~~~~~~~~~~~~~~给分~~~~~~~~~~~~
你给我个联系方式吧,我有项目和你研究一下!!!