怎么把行号加在DBGRID网格的每一行??
高手们,牛人们:怎么把行号加在网格的每一行??
我要在DBGRID的每一行第一列填充序号:从1开始。
以前有人问过,但都没有正确结果。怎么做?
其实就是怎样手动填充指定的单元格。
首先不要告诉我用绑定记录集的办法,我搜索过以前的帖子,绑定肯定是不行的。
我又尝试在DBGrid1DrawDataCell里画出序号,但是遇到问题:无法得到当前的TopRow值
谁能解决??
TADOQuery* m_AdoQuery;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ADOConnection1->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\\zqWork\\Database\\IsFilterClients.mdb;Persist Security Info=False";
m_AdoQuery = new TADOQuery(NULL);
m_AdoQuery->Connection = ADOConnection1;
AnsiString strSql = "select ' ' as Num,strIp,strHostName from Clients";
m_AdoQuery->SQL->Text = strSql;
m_AdoQuery->Open();
DataSource1->DataSet = m_AdoQuery;
......
void __fastcall TForm1::DBGrid1DrawDataCell(TObject *Sender,
const TRect &Rect, TField *Field, TGridDrawState State)
{
DBGrid1->DefaultDrawDataCell(Rect,Field,State);
if (Rect.left == 0) // 表明是首列
{
HWND hWnd = DBGrid1->Handle;
HDC hDC = ::GetDC(hWnd);
int i;
int nRow;
//nRow = DBGrid1->TopRow; // 如果这样能得到就好了
// 得到DBGRID里的滚动条信息
SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_POS;
::GetScrollInfo(hWnd,SB_VERT,&si);
int nPos = si.nPos;
si.fMask = SIF_RANGE;
::GetScrollInfo(hWnd,SB_VERT,&si);
int nMin = si.nMin;
int nMax = si.nMax;
si.fMask = SIF_PAGE;
::GetScrollInfo(hWnd,SB_VERT,&si);
int nPage = si.nPage;
nRow = m_AdoQuery->RecordCount * ((float)nPos/nMax); // 这个公式不对
int nTop = 18;
for(i = 0; i <= nPage; i++)
{
RECT lpRect;
lpRect.left=Rect.left;
lpRect.top=nTop;
lpRect.right=Rect.right;
lpRect.bottom=nTop+Rect.Height();
AnsiString strNum = nRow++;
UINT uFormat;
uFormat=DT_CENTER | DT_VCENTER | DT_SINGLELINE;
::DrawText(hDC,strNum.c_str(),strNum.Length(),&lpRect,uFormat);
nTop += Rect.Height()+1;
}
::ReleaseDC(hWnd,hDC);
}
}