C# Windows窗体DataGrid-Handel单击行标题上的展开按钮[+;]
这是一个关于C# Windows窗体DataGrid-Handel单击行标题上的展开按钮[+;],c#,.net,winforms,datagrid,C#,.net,Winforms,Datagrid,这是一个关于System.Windows.Forms.Datagrid的问题 单击展开按钮后,是否可以不使用“购买详细信息链接按钮”直接转到图2?我的意思是我不想要那个“购买详细信息链接按钮” 可能吗 最简单的方法就是像@monstertjie_za说的那样。在行中添加一个单击事件,打开一个新表单,您可以根据自己的喜好设置所有字段的样式 可选,您只需使用click事件打开图2中的表单。最简单的方法如@monstertjie_za所说。在行中添加一个单击事件,打开一个新表单,您可以根据自己的喜好
System.Windows.Forms.Datagrid
的问题
单击展开按钮后,是否可以不使用“购买详细信息链接按钮”直接转到图2?我的意思是我不想要那个“购买详细信息链接按钮”
可能吗
最简单的方法就是像@monstertjie_za说的那样。在行中添加一个单击事件,打开一个新表单,您可以根据自己的喜好设置所有字段的样式
可选,您只需使用click事件打开图2中的表单。最简单的方法如@monstertjie_za所说。在行中添加一个单击事件,打开一个新表单,您可以根据自己的喜好设置所有字段的样式 可选,您可以使用click事件打开图2中的表单。旧控件有一个私有的
NodeClicked
事件,您可以使用反射找到它并订阅该事件。这样,您就可以在行标题处点击+
private void Form1_Load(object sender, EventArgs e)
{
var eventsProperty = dataGrid1.GetType().GetProperty("Events",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
EventHandlerList events = eventsProperty.GetValue(dataGrid1) as EventHandlerList;
var eventsNodeClickedKeyField = dataGrid1.GetType().GetField("EVENT_NODECLICKED",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Static);
object eventsNodeClickedKey = eventsNodeClickedKeyField.GetValue(null);
events.AddHandler(eventsNodeClickedKey, new EventHandler(dataGrid1_NodeClicked));
}
private void dataGrid1_NodeClicked(object sender, EventArgs e)
{
var grid = sender as DataGrid;
var point = grid.PointToClient(MousePosition);
var hti = grid.HitTest(point);
grid.NavigateTo(hti.Row, "RelationName");
}
然后,您可以使用DataGrid
的NavigateTo
方法导航到所单击节点的相关表
这样,在单击行标题处的+
后,导航将立即完成
private void Form1_Load(object sender, EventArgs e)
{
var eventsProperty = dataGrid1.GetType().GetProperty("Events",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
EventHandlerList events = eventsProperty.GetValue(dataGrid1) as EventHandlerList;
var eventsNodeClickedKeyField = dataGrid1.GetType().GetField("EVENT_NODECLICKED",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Static);
object eventsNodeClickedKey = eventsNodeClickedKeyField.GetValue(null);
events.AddHandler(eventsNodeClickedKey, new EventHandler(dataGrid1_NodeClicked));
}
private void dataGrid1_NodeClicked(object sender, EventArgs e)
{
var grid = sender as DataGrid;
var point = grid.PointToClient(MousePosition);
var hti = grid.HitTest(point);
grid.NavigateTo(hti.Row, "RelationName");
}
旧控件有一个私有的NodeClicked
事件,您可以使用反射找到它并订阅该事件。这样,您就可以在行标题处点击+
private void Form1_Load(object sender, EventArgs e)
{
var eventsProperty = dataGrid1.GetType().GetProperty("Events",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
EventHandlerList events = eventsProperty.GetValue(dataGrid1) as EventHandlerList;
var eventsNodeClickedKeyField = dataGrid1.GetType().GetField("EVENT_NODECLICKED",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Static);
object eventsNodeClickedKey = eventsNodeClickedKeyField.GetValue(null);
events.AddHandler(eventsNodeClickedKey, new EventHandler(dataGrid1_NodeClicked));
}
private void dataGrid1_NodeClicked(object sender, EventArgs e)
{
var grid = sender as DataGrid;
var point = grid.PointToClient(MousePosition);
var hti = grid.HitTest(point);
grid.NavigateTo(hti.Row, "RelationName");
}
然后,您可以使用DataGrid
的NavigateTo
方法导航到所单击节点的相关表
这样,在单击行标题处的+
后,导航将立即完成
private void Form1_Load(object sender, EventArgs e)
{
var eventsProperty = dataGrid1.GetType().GetProperty("Events",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
EventHandlerList events = eventsProperty.GetValue(dataGrid1) as EventHandlerList;
var eventsNodeClickedKeyField = dataGrid1.GetType().GetField("EVENT_NODECLICKED",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Static);
object eventsNodeClickedKey = eventsNodeClickedKeyField.GetValue(null);
events.AddHandler(eventsNodeClickedKey, new EventHandler(dataGrid1_NodeClicked));
}
private void dataGrid1_NodeClicked(object sender, EventArgs e)
{
var grid = sender as DataGrid;
var point = grid.PointToClient(MousePosition);
var hti = grid.HitTest(point);
grid.NavigateTo(hti.Row, "RelationName");
}
使行可单击,或添加事件来处理行单击,然后将必要的代码放入there@monstertjie_za我知道如何获取链接按钮或子表的引用。是否需要进一步的帮助?使您的行可单击,或添加事件来处理行单击,然后将必要的代码放入there@monstertjie_za我知道如何获取链接按钮或子表的引用。您需要进一步的帮助吗?我添加了一个点击平衡。我不知道链接按钮是如何引用的。我在网上找不到很好的示例来实现它。如果您有一个主ID,请使用此ID将表单链接在一起,如您的示例中的ID nr.50。在click事件中加载新窗口并添加ID,如:form2 nwForm=new form2(ID);在新表单中,使用您单击的订单的ID来显示所有详细信息。我添加了一个偶数单击。我不知道链接按钮是如何引用的。我在网上找不到很好的示例来实现它。如果您有一个主ID,请使用此ID将表单链接在一起,如您的示例中的ID nr.50。在click事件中加载新窗口并添加ID,如:form2 nwForm=new form2(ID);在新表单中,使用您单击的订单ID来显示所有详细信息。这是一个黑客攻击,但效果很好。非常感谢。一个黑客,但工作得很好。非常感谢。