如何使用垂直列获取DataGridView

时间:2014-01-23 22:49:59

标签: c# winforms datagridview

在我的Winform C#应用程序中,我有DataGridViewDataTable绑定并且有很多记录。 我想以下列格式显示所选行(DataGridView)的详细信息(参见图像)。我应该使用Control或(Trick)来实现此目的。

enter image description here

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

5 个答案:

答案 0 :(得分:3)

我希望你会尝试在sql中使用PIVOT来使你的数据集看起来像上面的结果。您可以在DataSet中进行旋转(切换行和列),并将该数据集绑定到网格中。 见下面链接,它会帮助你..

http://codemaverick.blogspot.com/2008/02/transpose-datagrid-or-gridview-by.html

答案 1 :(得分:3)

通常情况下,我不会在 DataGridView 中执行此操作,它实际上是为了显示多条记录而您只想一次显示一条记录。我可以提出两种解决方法:

如果您知道要提前显示的字段的典型方法是在设计时布置一组单独的值显示标签和其他简单控件。这具有以下优点:

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

如果您不知道要在设计时显示的字段,或者不想打扰它们,请使用 PropertyGrid 控件而不是 DataGridView 。我从来没有尝试过使用DataTable作为数据源,但在C#/winforms: how to best bind a propertygrid and a System.Data.DataRow

看起来有一个很好的答案

答案 2 :(得分:0)

这就是我要做的事情

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

答案 3 :(得分:0)

Visual Basic Power Packs有一个DataRepeater控件,可以在这些情况下使用。您可以按照您想要的方式设计每一行,并为每一行放置您想要放置的任何控件。

以下是演示如何使用此DataRepeater控件的视频:

http://channel9.msdn.com/Blogs/funkyonex/The-New-DataRepeater-Control-in-the-Latest-Power-Packs-Release

您可以下载visual basic power pack:

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/

答案 4 :(得分:-1)

<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();