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

时间:2017-07-25 10:07:38

标签: c# .net gridview devexpress

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

  • 酒店视图(按LocationHotel Name列分组)
  • 可用性视图(是酒店网格的详细视图,包含所选酒店的可用性)

我在输入中有这些数据:Location NameHotel name

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

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

你能帮帮我吗?

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

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;
}

截图:

enter image description here

1 个答案:

答案 0 :(得分:0)

我建议您浏览Process Group Rows

的文档

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

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);

<强>参考文献:
How to select only group rows in XtraGrid with multi-select mode?
Group rows in a gridview
Selecting row in a grouped grid