以编程方式单击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
的引用,然后继续以编程方式单击它?
找到解决方案了。我以编程方式调用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
设置为第一行(也是唯一一行),以便在调用开始后可以继续进行其他操作。