StringGrid 问题

u010629734 2013-05-26 04:53:07
如何实现两行StringGrid的内容互换啊?我想实现比较StringGrid某一栏属性的大小,然后根据这一栏,各个行重新排序。大家有没有办法实现整行之间的互换啊?

还有DBGrid能人为的往某行某列填数据,让其显示吗?
...全文
133 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010629734 2013-05-29
  • 打赏
  • 举报
回复
引用 8 楼 ccrun 的回复:
[quote=引用 6 楼 ccFelix 的回复:] TStringGrid::MoveRow(FromIndex, ToIndex); 有这个方法的啊 莫非你的版本是6?
TStringGrid 类的 MoveRow 方法是 protected 的, 需要在继承类中公布以后才能使用. 这和版本没有关系.[/quote] 我用的是6.0,在6.0中调用TStringGrid的方法Protect: RowMoved,而没有MoveRow;不知别的版本名字是不是一样,OK,结贴了!
ccrun.com 2013-05-27
  • 打赏
  • 举报
回复
引用 6 楼 ccFelix 的回复:
TStringGrid::MoveRow(FromIndex, ToIndex); 有这个方法的啊 莫非你的版本是6?
TStringGrid 类的 MoveRow 方法是 protected 的, 需要在继承类中公布以后才能使用. 这和版本没有关系.
ccrun.com 2013-05-27
  • 打赏
  • 举报
回复
如果没猜错,你在TMyStringGrid类中的MoveRow方法中调用自己了吧.
Kanson 2013-05-27
  • 打赏
  • 举报
回复
TStringGrid::MoveRow(FromIndex, ToIndex); 有这个方法的啊 莫非你的版本是6?
u010629734 2013-05-27
  • 打赏
  • 举报
回复
引用 4 楼 ccrun 的回复:
[quote=引用 3 楼 u010629734 的回复:] 妖哥,按照这个方法,把TMyStringGrid类添加到头文件中,然后 ((TMyStringGrid *)StringGrid1)->MoveRow(1, 3);调用MoveRow,会出现 Stack OverFlow 错误,是用法不对吗?
来吧, 啥也不用说了, 上你的代码.[/quote] 哈哈,搞清楚了。应该是调用TStringGrid类中的Protected: RowMoved 方法.
class TMyStringGrid: public TStringGrid
        {
           public:
           void __fastcall MoveRow(int FromIndex, int ToIndex)
          {
             TStringGrid::RowMoved(FromIndex, ToIndex);
          }
        };
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // 将第2行移动到第4行
    ((TMyStringGrid *)StringGrid1)->MoveRow(1, 3);
}
这样就OK了,谢谢啦!
ccrun.com 2013-05-27
  • 打赏
  • 举报
回复
引用 3 楼 u010629734 的回复:
妖哥,按照这个方法,把TMyStringGrid类添加到头文件中,然后 ((TMyStringGrid *)StringGrid1)->MoveRow(1, 3);调用MoveRow,会出现 Stack OverFlow 错误,是用法不对吗?
来吧, 啥也不用说了, 上你的代码.
u010629734 2013-05-27
  • 打赏
  • 举报
回复
引用 2 楼 ccrun 的回复:
1. TStringGrid 本身已提供 MoveRow 的功能,这样使用:
class TMyStringGrid: public TStringGrid
{
public:
    void __fastcall MoveRow(int FromIndex, int ToIndex)
    {
        TStringGrid::MoveRow(FromIndex, ToIndex);
    }
};

// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // 将第2行移动到第4行
    ((TMyStringGrid *)StringGrid1)->MoveRow(1, 3);
}
2. DBGrid 想人工填充数据,使用内存表就行了,简单说就是利用 TClientDataSet,具体的代码可以 Google 一下。
妖哥,按照这个方法,把TMyStringGrid类添加到头文件中,然后 ((TMyStringGrid *)StringGrid1)->MoveRow(1, 3);调用MoveRow,会出现 Stack OverFlow 错误,是用法不对吗?
星際訪客 2013-05-27
  • 打赏
  • 举报
回复
DBGrid 可以透過 TClientDataSet 物件當中繼任意填充數據...必須先將 LockType 設置為 ltBatchOptimistic 才能變更數據......
ccrun.com 2013-05-26
  • 打赏
  • 举报
回复
1. TStringGrid 本身已提供 MoveRow 的功能,这样使用:
class TMyStringGrid: public TStringGrid
{
public:
    void __fastcall MoveRow(int FromIndex, int ToIndex)
    {
        TStringGrid::MoveRow(FromIndex, ToIndex);
    }
};

// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // 将第2行移动到第4行
    ((TMyStringGrid *)StringGrid1)->MoveRow(1, 3);
}
2. DBGrid 想人工填充数据,使用内存表就行了,简单说就是利用 TClientDataSet,具体的代码可以 Google 一下。
缘中人 2013-05-26
  • 打赏
  • 举报
回复
互换用中间变量替换可以吧 String str str = StringGrid1->Cell[0][1]; StringGrid1->Cell[0][1] = StringGrid1->Cell[1][1]; StringGrid1->Cell[1][1] = str; DBGrid就是dataset操作

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧