以编程方式单击DataGrid中的ButtonColumn

本文关键字:中的 ButtonColumn DataGrid 单击 编程 方式 | 更新日期: 2023-09-27 18:01:27

我有一个搜索页面,它可以在单独的DataGrid控件中返回多个搜索结果,或者如果搜索足够具体,一个单个结果在单个网格中。

如果只找到一个结果,那么我想调用单击该网格中唯一一行的ButtonColumn,然后打开一个单独的页面,就像用户自己单击它一样。

这是我的Page_LoadComplete事件处理程序:

protected void Page_LoadComplete(object sender, EventArgs e)
{
    var allControls = new List<DataGrid>();
    // Grab a list of all DataGrid controls on the page.
    GetControlList(Page.Controls, allControls);
    var itemsFound = allControls.Sum(childControl => childControl.Items.Count);
    for (var i = 0; i <= allControls.Count; i++)
    {
        itemsFound += allControls[i].Items.Count;
        // If we're at the end of the for loop and only one row has
        // been found, I want to get a reference to the ButtonColumn.
        if (i == allControls.Count && itemsFound == 1)
        {
            var singletonDataGrid = allControls[i];
            // **Here** I want to reference the ButtonColumn and then
            // programmatically click it??

        }            
    }
}

我如何获得对有问题的ButtonColumn的引用,然后继续以编程方式单击它?

以编程方式单击DataGrid中的ButtonColumn

找到解决方案了。我以编程方式调用OnSelectedIndexChanged事件处理程序(定义为Select_Change),如下所示:

    protected void Page_LoadComplete(object sender, EventArgs e)
    {
        var allControls = new List<DataGrid>();
        // Grab a list of all DataGrid controls.
        GetControlList(Page.Controls, allControls);
        var itemsFound = 
            allControls.Sum(childControl => childControl.Items.Count);
        for (var i = 0; i < allControls.Count; i++)
        {
            if (allControls.Count > 0 && allControls[i].ID == "grid")
            {
                // If a single row is found, grab a reference to the
                // ButtonColumn in the associated grid.
                if (i == (allControls.Count - 1) && itemsFound == 1)
                {
                    var singletonDataGrid = allControls[i];
                    singletonDataGrid.SelectedIndex = 0;
                    Select_Change(singletonDataGrid, new EventArgs());
                }
            }
        }
    }

使用对单行DataGrid的引用,我还将其SelectedIndex设置为第一行(也是唯一一行),以便在调用开始后可以继续进行其他操作。