winforms 如何获取具有垂直列的DataGridView

nhhxz33t  于 2023-02-09  发布在  其他
关注(0)|答案(6)|浏览(208)

在我的WinformC#应用程序中,我有一个绑定到DataTableDataGridView,并且有很多记录。我想以下面的格式显示所选行(DataGridView)的详细信息(见图)。我应该使用什么Control或(技巧)来实现这一点。

换句话说:“表的第一列应具有列名,第二列应具有相应的值”

gev0vcfq

gev0vcfq1#

通常,我不会在DataGridView中这样做,它实际上是为了显示多条记录,而您一次只想显示一条记录。我可以建议两种替代方法来处理这个问题:
如果您知道要提前显示的字段,则通常的方法是在设计时布局一组单独的值显示标签和其他简单控件。这样做有以下优点:

  • 事物的位置更加灵活
  • 可以自定义用于每个单独字段的控件类型。例如,booean值可能显示为复选框,而不是文本。
  • 值前面的标签可以本地化为用户语言。即使不是国际应用程序,显示与列的数据库方案名不同的标签有时也很有用。

如果您不知道在设计时要显示哪些字段,或者不想麻烦地安排它们的布局,请使用PropertyGrid控件而不是DataGridView。我实际上从未尝试过将DataTable用作数据源,但看起来在C#/winforms: how to best bind a propertygrid and a System.Data.DataRow中有一个很好的解决方案

14ifxucb

14ifxucb2#

我希望你能尝试在SQL中使用PIVOT来使你的数据集看起来像上面的结果。相反,你可以在你的数据集中旋转(切换行和列)并将该数据集绑定到你的网格。请参见下面的链接,它会帮助你。
http://codemaverick.blogspot.com/2008/02/transpose-datagrid-or-gridview-by.html

k75qkfdt

k75qkfdt3#

这就是我要做的
1.构建主DataGridView并进行数据绑定后,迭代网格上的Columns集合,并将可见列的名称存储在List中(此操作仅执行一次)
1.创建另一个基于DataGridView的简单控件(仅执行一次)
1.创建一个SelectionChanged事件处理程序,获取选中行的Index,如果使用单行选择模式,可以通过dg.SelectedRows[0].Index获取。
1.创建一个包含两列(一个字段和另一个值)的DataTable。在步骤1中迭代生成的必需列列表,在字段中添加列名,并使用步骤3中获取的索引从绑定到主DataGridView的主数据表中检索DataRow来填充值。
1.清除步骤2中创建的控件,将其绑定到步骤4中创建的数据表并显示。

9rbhqvlz

9rbhqvlz4#

Visual Basic Power Packs有一个DataRepeater控件,可以在这些情况下使用。您可以按照自己的方式设计每一行,并为每一行放置您想要放置的任何控件。
以下视频演示了如何使用此DataRepeater控件:
http://channel9.msdn.com/Blogs/funkyonex/The-New-DataRepeater-Control-in-the-Latest-Power-Packs-Release
您可以下载visual basic电源包:
http://www.microsoft.com/en-in/download/details.aspx?id=25169
另外,如果您使用的是Visual Studio 2013,请阅读以下内容:
http://ntcoder.com/bab/2013/12/20/visualbasic-powerpack-missing-from-visual-studio-2013/

fquxozlt

fquxozlt5#

string[] C = new string[50];// For column Name
                    DataTable dt1;//Put your Table data in dt1

                    for (int r = 0; r < dt1.Columns.Count; r++)
                    {
                        C[r] = dt1.Columns[r].ToString();
                    }

                    for (int r = 0; r < dt1.Columns.Count; r++)
                    {
                        dataGridView2.Rows.Add(C[r], dt1.Rows[0][C[r]].ToString());

                    }
yc0p9oo0

yc0p9oo06#

<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
    <tr>
        <td>Reg_no</td>
        <td>
            <asp:Label runat="server" ID="lblreg_no" Text='<%# Eval("reg_no") %>' />
        </td>
    </tr>
    <tr>
        <td>Name</td>
        <td>
            <asp:Label runat="server" ID="lblname" Text='<%# Eval("name") %>' />
        </td>
    </tr>
    <tr>
        <td>DOB</td>
        <td>
            <asp:Label runat="server" ID="lbldob" Text='<%# Eval("dob") %>' />
        </td>
    </tr>
</ItemTemplate>
</asp:Repeater>

然后在代码后面,您只需像绑定另一个容器一样绑定它。

Repeater1.datasource= "";
Repeater1.DataBind();

相关问题