使用C#

时间:2019-05-03 15:00:39

标签: c# asp.net gridview merge

我有一个看起来像this的gridview。

我正在尝试根据表格标题的标题值将gridview中的多个列合并为一个列。

我试图将“街道名称”,“城市”,“州”,“邮政编码”组合在“地址”的一个值下,以便将该值作为单个列“ 地址”获得。在上面的示例中,使用ID,Person和Address会将我的总列数减少到仅3。如何在C#中做到这一点?

我不是使用BoundField / Template字段,而是从excel文件读取并将其数据加载并将其绑定到gridview中,所以我不知道每次运行中可能有多少列。 我看到了许多教程,这些教程着重于Boundfield数据,并使用DataBinder.Eval()方法来完成此操作,但这对我不起作用。

我的gridview看起来像这样:

<asp:GridView ID="GridView1" runat="server" HorizontalAlign="Center"> </asp:GridView>

我背后的代码基本上是使用FileUpload Control上传excel文件,建立OleDBConnection,创建新的DataTable并将所有内容绑定到GridView1中。

然后如何使用C#将它们放在同一列下?任何想法/帮助将不胜感激。

PS:gridview的最后一行和倒数第二行的“ ...”值是其他值。这只是为了表明可能有数百个值。

3 个答案:

答案 0 :(得分:0)

  

我背后的代码基本上是使用FileUpload Control上传Excel   文件,建立OleDBConnection,创建新的DataTable和   将所有内容绑定到GridView1。

在创建数据表时,添加名为Address的新列,数据表中的foreach行用所需的值(例如使用String.concat(...))填充“地址”列。

之后,您可以按如下所示编辑您的asp代码:

<asp:GridView ID="GridView1" runat="server" HorizontalAlign="Center">
<columns>
    <!-- all the fields from the DT you want to show-->
    <asp:BoundField DataField="Id" Visible="true"></asp:BoundField>
    <asp:BoundField DataField="Person" Visible="true"></asp:BoundField>
    <asp:BoundField DataField="Address" Visible="true"></asp:BoundField>
    <asp:BoundField DataField="Other_Column_You_Like_in_dt" Visible="true"></asp:BoundField>
</columns>
</asp:GridView>

答案 1 :(得分:0)

您可以使用String.concat方法将4列合并为1列示例:

ID:1 Adress:111 east st ; Loneville ;TX;77011

在这种情况下,我使用了;进行溢出,可以用其他信号替换它们。当您要从该列中请求数据时,请使用以下代码(这只是我的想法):

string[] adress=person_datagrid.Rows[adress].Cells[number cell].Value.ToString().Split(';');
 string street_name=adress[0];
 string city=adress[1];
 string state=adress[2];
 string Zipcode=adress[3];

答案 2 :(得分:0)

您可以使用以下内容:(未测试)。您可以使用StringBuilder连接文本并检查nullorempty字符串

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
    TableCell cell = e.Row.Cells[2];
     cell.Text = cell.Text + “ “ + e.Row.Cells[3] + “ “ + e.Row.Cells[4] + “ “ + e.Row.Cells[5];
    cell.ColumnSpan = 4;
    e.Row.Cells[3].Visible = false;
     e.Row.Cells[4].Visible = false;
     e.Row.Cells[5].Visible = false;
}
}