C++builder TAdvStringGrid罐';t更新所选单元格

C++builder TAdvStringGrid罐';t更新所选单元格,c++builder,vcl,tms,C++builder,Vcl,Tms,我有一个带有TAdvStringGrid组件的fowm。网格的第0列包含一组非连续整数,第1列包含一个字符串,该字符串可能为空或一个单词。列1具有包含允许值的edComboList就地编辑器。我试图在例程中设置第1列中的值 下面的代码有效,但当前选定的单元格除外。该单元格中的文本值保持不变。我怀疑这与该列有一个编辑器有关,但我不知道如何在执行更新之前禁用编辑器,甚至无法确定代码中当前选定的单元格 int MyForm::SetAC(String & Flt, String & A

我有一个带有TAdvStringGrid组件的fowm。网格的第0列包含一组非连续整数,第1列包含一个字符串,该字符串可能为空或一个单词。列1具有包含允许值的edComboList就地编辑器。我试图在例程中设置第1列中的值

下面的代码有效,但当前选定的单元格除外。该单元格中的文本值保持不变。我怀疑这与该列有一个编辑器有关,但我不知道如何在执行更新之前禁用编辑器,甚至无法确定代码中当前选定的单元格

int MyForm::SetAC(String & Flt, String & AC) {
   TFindParams fp = TFindParams();
   fp << fnFindInPresetCol << fnMatchFull;
   // sgFlights is the name of the TAdvStringGrid
   TPoint p = sgFlights->Find(TPoint(0, 0), Flt, fp);
   if (p.y > 0) {
      sgFlights->Cells[1][p.y] = AC;

   }
   return p.y;
}
void MyForm::LoadFACfromGDB() {
     std::map<int, String>FlightMatcher;
     // .. code to populate flight matcher...
      map<int, String>::const_iterator itr;
      for (itr = FlightMatcher.begin(); itr != FlightMatcher.end(); ++itr) {
         String Flt = IntToStr(itr->first);
         String AC = itr->second;
         SetAC(Flt, AC);
}
int MyForm::SetAC(String&Flt,String&AC){
TFindParams fp=TFindParams();
fp(0){
sgFlights->Cells[1][p.y]=AC;
}
年回报率;
}
void MyForm::LoadFACfromGDB(){
标准::mapFlightMatcher;
//…填充航班匹配器的代码。。。
map::const_迭代器itr;
对于(itr=FlightMatcher.begin();itr!=FlightMatcher.end();++itr){
字符串Flt=IntToStr(itr->first);
字符串AC=itr->秒;
SetAC(Flt,AC);
}

我发现这个问题的解决方案是删除选择。令人惊讶的是,ClearSelection方法没有做到这一点。在这种情况下,我有一个固定行和一个固定列,因此将选择设置为0,0可以有效地删除它

   TGridRect gr = sgFlights->Selection;
   gr.Top = 0;
   gr.Bottom = 0;
   sgFlights->Selection = gr;