【问题标题】:C# Convert DataTable rows into Columns with custom formattingC# 使用自定义格式将 DataTable 行转换为列
【发布时间】:2017-05-02 06:24:05
【问题描述】:

我正在开发 asp.net web app .net 版本 4。我有一个如下所示的数据表:

    FCTR_GRP    CUST_TIER   CUST_TIER
    DSC SW      Tier 1      1.000000
    DSC SW      Tier 2      1.000000
    DSC SW      Tier 3      1.000000
    DSC SW      Tier 4      1.000000 

使用我从 Netezza 数据库中读取的上述数据表,我想将其转换为如下数据表:

    FCTR_GRP    TIER_1      TIER_2    TIER_3    TIER_4
    DSC SW      1.000000    1.000000  1.000000  1.000000 

然后将其绑定到gridview。由于可以稍后添加层,因此 gridview 需要是动态的。 直到现在我才到达这里。我可以像这样转换第一个数据表:

 FCTR_GRP    TIER_1      TIER_2    TIER_3    TIER_4
 DSC SW      1.000000    
 DSC SW                  1.000000  
 DSC SW                            1.000000  
 DSC SW                                      1.000000  

代码用作(对代码不满意:(但没有其他选择)

 DataTable CustomerCurrentFactorDataTable = new DataTable();
 CustomerCurrentFactorDataTable.Columns.Add("Factor Group", typeof(System.String));
            foreach (DataRow datarow in dt.Rows)
            {
                CustomerCurrentFactorDataTable.Columns.Add(datarow["CUST_TIER"].ToString().ToUpper(), typeof(System.String));
            }
            GridViewSample.DataSource = CustomerCurrentFactorDataTable;
            GridViewSample.DataBind();
            #region
            string query = "SELECT FCTR_GRP, CUST_TIER, CUST_FCTR FROM DBO.CUST_FCTR";
            #endregion
            dt = getData.GetDataTable(query);
            DataRow dr = CustomerCurrentFactorDataTable.NewRow();
            int columnCount = CustomerCurrentFactorDataTable.Columns.Count;
            int internalCounter = 0;
            int count = 0;
            bool flag=false;
            int loopoutcounter = 0;
            foreach (DataRow dataRow in dt.Rows)
            {
                count = 0;
                if (loopoutcounter == 2)
                {
                    loopoutcounter = 0;
                    CustomerCurrentFactorDataTable.Rows.Add(dr);
                    dr = CustomerCurrentFactorDataTable.NewRow();
                    //dr.Delete();
                }
                foreach (var cell in dataRow.ItemArray)
                {
                    if (count == 0)
                    {
                        dr[count] = cell.ToString();
                        loopoutcounter++;
                        count++;

                    }

                    if (flag)
                    {
                        dr[internalCounter] = cell.ToString();
                        flag = false;
                        loopoutcounter++;
                    }
                    foreach (DataColumn column in CustomerCurrentFactorDataTable.Columns)
                    {                            
                        if (column.ColumnName == cell.ToString().ToUpper())
                        {
                            flag = true;
                            internalCounter = column.Ordinal;
                            continue;
                        }                                               
                    }
                }

如果我们可以转换最后一个数据表(如第二个数据表或任何击球手选项),任何帮助都会很有用。提前致谢。

【问题讨论】:

  • 您可以使用 LINQ 并使用 .GroupBy()。这将返回DSC SW 上的分组,其中所有元素都按所述值分组。
  • 听起来你需要旋转你的数据表。这是一个例子。 stackoverflow.com/questions/12866685/…
  • 您希望在每行 x 列中获得什么值?

标签: c# asp.net linq gridview datatable


【解决方案1】:
string html = "<table>";
//add header row
html += "<tr>";
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
    html += "<td>" + ds.Tables[0].Columns[i].ColumnName + "</td>";
html += "</tr>";
//add rows
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
    html += "<tr>";
    for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
        html += "<td>" + ds.Tables[0].Rows[i][j].ToString() + "</td>";
    html += "</tr>";
}
html += "</table>";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多