我正在尝试根据表格标题的标题值将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的最后一行和倒数第二行的“ ...”值是其他值。这只是为了表明可能有数百个值。
答案 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;
}
}