C# 按名称在Devexpress网格视图中打开组和详细信息

C# 按名称在Devexpress网格视图中打开组和详细信息,c#,.net,gridview,devexpress,C#,.net,Gridview,Devexpress,我正在开发一个Winform应用程序,其中包含一个Devexpress GridView,其组成如下: 酒店视图(按位置和酒店名称列分组) 可用性视图(是酒店网格的详细视图,包含所选酒店的可用性) 我输入了以下数据:位置名称,酒店名称 当我打开表单时,我需要展开位置和酒店名称的相应组,并打开该酒店可用性的详细视图 在附件中,您可以找到网格的屏幕截图,该行根据需要展开 你能帮我吗 我尝试过的代码如下,但它只打开位置组,而不打开酒店名称和详细信息 private void hotelAvaila

我正在开发一个Winform应用程序,其中包含一个Devexpress GridView,其组成如下:

  • 酒店视图(按
    位置
    酒店名称
    列分组)
  • 可用性视图(是酒店网格的详细视图,包含所选酒店的可用性)
我输入了以下数据:
位置名称
酒店名称

当我打开表单时,我需要展开位置和酒店名称的相应组,并打开该酒店可用性的详细视图

在附件中,您可以找到网格的屏幕截图,该行根据需要展开

你能帮我吗

我尝试过的代码如下,但它只打开位置组,而不打开酒店名称和详细信息

private void hotelAvailabilityGridView_EndGrouping(object sender, EventArgs e)
{
    FocusFirstRecordInGroupRow(_hotelName);
}

public void FocusFirstRecordInGroupRow(string textToFind)
{
    int groupRow = FindGroupRow(_hotelName);
    if (groupRow >= 0) return;
    hotelGridView.ExpandGroupRow(groupRow);
    hotelGridView.FocusedRowHandle = hotelGridView.GetChildRowHandle(groupRow, 0);
}

private int FindGroupRow(string textToFind)
{
    int i = 1;
    while (i != GridControl.InvalidRowHandle)
    {
        i--;
        string value = hotelGridView.GetGroupRowValue(i, hotelGridView.Columns[0]).ToString();
        if (value == textToFind)
        {
            RecursExpand(hotelGridView, i);
            return i;
        }
    }
    return 0;
}
截图:


我建议您仔细阅读

您可以使用以下查看方法检查它是否为分组行:

int rowHandle = view.FocusedRowHandle;
if(view.IsGroupRow(rowHandle)){}
之后,您可以设置它的展开状态:

bool expanded = View.GetRowExpanded(rowHandle);
View.SetRowExpanded(rowHandle, !expanded);
您可以按如下所示的值定位一行,您可以根据需要展开匹配的行并折叠其他行

using DevExpress.XtraGrid.Views.Grid;
//... 
GridView View = gridView1;
int rowHandle = -1;
do {
    rowHandle = View.LocateByValue(rowHandle+1, View.Columns["Is In Stock"], false);
    View.MakeRowVisible(rowHandle, false);
} while(rowHandle != GridControl.InvalidRowHandle);
参考文献:



您能找到组行的行句柄吗?