C++Builder中的DBGrid没有点标头进行排序的功能,参考网上及帮助文档,写了个DBGrid与ClientDataSet连接的排序代码。
C++Builder开发人员太少,资料太少,分享给大家参考下。
// ---------------------------------------------------------------------------void TForm1::DBTitleSort(TColumn *SortColumn) { try { UnicodeString OldIndex; TDBGrid * dbgTemp = (TDBGrid*)SortColumn->Grid; if ((SortColumn->Grid->DataSource == NULL) || (SortColumn->Grid->DataSource->DataSet == NULL) || !(SortColumn->Grid->DataSource->DataSet->Active) || (SortColumn->Grid->DataSource->DataSet->IsEmpty())) { return; } TClientDataSet *cdsCur = (TClientDataSet*)SortColumn->Field->DataSet; UnicodeString strSortColumnFileName = SortColumn->Field->FieldName; OldIndex = cdsCur->IndexName; if (OldIndex != "") { cdsCur->IndexName = ""; cdsCur->DeleteIndex(OldIndex); } for (int i = 0; i < dbgTemp->Columns->Count; i++) { //清除DBGrid标题显示 TColumn *temColumn = dbgTemp->Columns->Items[i]; temColumn->Title->Caption = temColumn->FieldName; temColumn->Title->Font->Style = TFontStyles();//还原 temColumn->Title->Font->Color = clWindowText;//变黑 } if (SortColumn->FieldName != OldIndex) { //点击排序跟原来已经点击不一样 SortColumn->Grid->Tag = 0; } if (SortColumn->Grid->Tag == 0) { //默认使用降序排列 TIndexOptions opts; opts << ixDescending; cdsCur->AddIndex(strSortColumnFileName,strSortColumnFileName, opts); // 降序 SortColumn->Grid->Tag = 1; SortColumn->Title->Caption = "▼ " + SortColumn->FieldName; SortColumn->Title->Font->Style = TFontStyles() << fsBold;//加粗 SortColumn->Title->Font->Color = clRed;//变红 } else { // 否则按升序排列 TIndexOptions opts; opts << ixPRimary; cdsCur->AddIndex(strSortColumnFileName,strSortColumnFileName, opts); // 升序 SortColumn->Grid->Tag = 0; SortColumn->Title->Caption = "▲ " + SortColumn->FieldName; SortColumn->Title->Font->Style = TFontStyles() << fsBold;//加粗 SortColumn->Title->Font->Color = clRed;//变红 } cdsCur->IndexName = strSortColumnFileName; } catch (...) { //有异常,捕获但不进行处理 }}// ---------------------------------------------------------------------------新闻热点
疑难解答
图片精选