【问题标题】:Add empty row above the header row in datatable在数据表的标题行上方添加空行
【发布时间】:2019-06-22 03:33:56
【问题描述】:

我按照Adding new row to datatable's top 添加了空行,但即使我的索引为 0,它仍然不会在我的数据表的标题上方添加空行。

我试过了

DataRow 空白行 = dt.NewRow(); dt.Rows.InsertAt(blankRow, 0);

这是我的代码

public void filldatagridview(ExcelWorksheet workSheet)
        {
            DataTable dt = new DataTable();

            //Create the data column
            for (int col = workSheet.Dimension.Start.Column; col <= workSheet.Dimension.End.Column; col++)
            {
                dt.Columns.Add(col.ToString());
            }

           for (int row = 12; row <= 26; row++)
            {
                DataRow newRow = dt.NewRow(); //Create a row
                int i = 0;
                for (int col = workSheet.Dimension.Start.Column; col <= workSheet.Dimension.End.Column; col++)
                {
                    newRow[i++] = workSheet.Cells[row, col].Text;
                }
                dt.Rows.Add(newRow);
            }

            dt.Columns.RemoveAt(0); //remove No 
            dt.Columns.RemoveAt(0); //remove article

            //Get BookCode 
            using (SqlConnection conn = new SqlConnection("Server con.."))
            using (SqlCommand cmd = new SqlCommand(null, conn))
            {
                StringBuilder sb = new StringBuilder("SELECT InvtID AS BOOKCODE FROM InventoryCustomer WHERE Barcode In (");

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (i != 0) sb.Append(",");

                    string name = "@P" + i;
                    cmd.Parameters.AddWithValue(name, dt.Rows[i]["3"]);
                    sb.Append(name);
                }
                sb.Append(")");

                cmd.CommandText = sb.ToString();

                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);

                dt.DefaultView.Sort = "BOOKCODE";
                dt = dt.DefaultView.ToTable();

                dt.Columns["BOOKCODE"].SetOrdinal(0);

                dataGridView2.DataSource = dt;
            }
}

 private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
        }

【问题讨论】:

  • 运行它会发生什么?
  • 您不能在标准控件的标题上方添加新行。为此,您需要另一个(自定义/第三方)控件。
  • @Ben 我的程序将 excel 文件读入数据表。那行代码只在标题下方添加空行,而不是在标题上方添加我想要的
  • @Julo 你能举个例子吗?
  • @Nebula9:什么例子?如何创建具有请求功能的自定义控件?这代码太多了。或第三方控制。对不起,我不知道名字。我只知道它们存在,但我发现只有付费的,或者使用不兼容的许可证(这意味着我不能在我的项目中使用它们)。但主要问题是:为什么需要在标题上方有一行?你真的需要在标题上方有一行吗?不能用其他方法解决吗?例如移动控件并在其上方放置另一个控件(例如TextLabel)。有很多方法可以解决它,但只有你知道你需要什么。

标签: c# datatable


【解决方案1】:

你可以试试这个。由于 DataTable 为空,添加一行会自动添加到第 0 个索引处:

DataRow row = dt.NewRow();
dt.Rows.Add(row);

或者你可以这样做:

DataRow blankRow = dt.NewRow(); 

for (int temp = 0; temp < 10; temp++)  // here 10 is number of columns
{
    blankRow[temp] = "";  // use appropriate data type,
}
dt.Rows.InsertAt(blankRow, 0);

更新:

在添加数据源之前的 DataBound 事件:

GridViewRow headerRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);

TableHeaderCell headerCell = new TableHeaderCell();
headerCell.Text = "headercol1”;
headerCell.ColumnSpan = 2;
headerRow.Controls.Add(headerCell);

headerCell = new TableHeaderCell();
headerCell.ColumnSpan = 2;
headerCell.Text = "headercol2”;
headerRow.Controls.Add(headerCell);
dataGridView2.HeaderRow.Parent.Controls.AddAt(0, headerRow); 

这假设您有一个包含 4 列的网格视图。我给 headercol1 2 colspace 和 headercol2 2 colspace

【讨论】:

  • 对于第一个解决方案,该行仍在标题下方。第二个解决方案我得到了错误 System.IndexOutOfRangeException: '找不到第 0 列。我在初始化我的数据表之后和程序将 excel 文件读入数据表之前插入该代码。
  • 您是否将数据表显示为网格视图。你需要在gridview的标题上方行吗?
  • 是的,我将数据表显示为 gridview dataGridView2.DataSource = dt; 该代码不适用于 gridview?
  • 更新了答案。请参见。这会在添加到数据表之前向 gridview 添加一个单独的标题
  • 请看我的代码。我应该在datagridview2 或filldatagridview 中使用它吗?当我尝试这两种方法时,'GridViewRow' 显示错误并建议我使用'datagridviewrow' 与'TableHeaderCell' 相同。我用谷歌搜索了两者的区别,但我无法理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2020-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多