Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows窗体DataGrid-Handel单击行标题上的展开按钮[+;]_C#_.net_Winforms_Datagrid - Fatal编程技术网

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来显示所有详细信息。这是一个黑客攻击,但效果很好。非常感谢。一个黑客,但工作得很好。非常感谢。