如题,马工,原来请教过你这个问题,我以前的问题贴子里有,你也回复了我解决办法,即:加了一个标识isentered = True。具体不说了。我在我的程序里,底层封装了TrueDBgrid,加了很多功能,一直以来,回车换行我没来得急弄,今天改底层,把最后一个单元格时回车换行加上,我发现你给我的解决办法只能完成正常状态的情况,意思如下:
如果网格里有 citem_no,citem_name,nqty,nprice,namount,cmemo这些列,
1、都显示,可以,那么用 //但是,运行时也不能拖动列调位置
if (col==tgrid1.Columns.Count-1) //当前是最后一列
{
if (row==tgrid1.VisbleRows-1 //最后一行,必须用这个,绑定状态下不能用RowCount,系统会报错,本身系统也提示说了那是非绑定用的。
{
}
}
2、但是,如果网格中的列是根据存在数据库中显示与否标识动态加载的话,比如上面这些,只显示citem_no,citem_name,nqty 此时,程序执行的逻辑就不对了,或者根本不跳到下一行,核心问题还是,Col属性与Columns.Count没有可比性,此时,col的值应该是2,通过测试,我始终发现,Col是创建列时的定死的值,甚至你在运行起来程序,拖动列调了位置,Col属性是不变的。我也用VisbleCols属性试了,代表显示了多少列,Col与它也没有可比性。
马工,我上面说的对吗?
>>>>>所以,基于以上原因,我继承重写了C1DataColumn为一个新对象,给它加了一个像微软的DataGridView中的列的index一样的属性,给主网格加了一个int_count属性,在动态创建列时,每建一个列,当是显示的, int_count加1,并且赋值index属性等于int_count,这样,在KEYdown事件里,我比对列的index是否等于int_count。这种方法临时实现了需求,但若用户在运行时,拖动调整列的位置,还是不行。因为,C1TrueDBgrid不像微软的DataGridView一样,列有个DisplayIndex属性,拖动时是实时变的。若要从根本上解决,看来,也得弄个DisplayIndex属性,并且在列的位置调整时,更新这个属性。
马工,我说的是否正确?还是说不正确,把简单问题复杂化了?
如果正确,也希望别人遇到此问题,有些帮助。
|