【问题标题】:Column data from Sql Server not position as match with column in Datatable来自 Sql Server 的列数据与 Datatable 中的列不匹配
【发布时间】:2019-01-28 06:44:13
【问题描述】:

一旦我导入Excel文件,InvtID中的数据已经与“3”列匹配,但问题如图所示,为什么数据列(InvtID)在最后一行数据之后填写数据表?我如何能够固定位置以匹配“3”列。我已经将 InvtID 列定位在 0。是否有任何单行代码可以将行定位在 1?:

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 
    var barCodes = dt.AsEnumerable().Select(r => r.Field<string>("3"))
        .ToArray(); //EAN column
    var barCodesstring = string.Format("'{0}'", string.Join("','", barCodes));
    SqlCommand cmd = new SqlCommand("SELECT InvtID FROM InventoryCustomer WHERE 
        Barcode IN (" + barCodesstring + ")", conn);
    conn.Open();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dt);

    dt.Columns["InvtID"].SetOrdinal(0);
    dataGridView2.DataSource = dt;

    conn.Close();
}

【问题讨论】:

  • 我确实复制了该列并将其添加为新列,但该行仍然不是从索引 1 开始

标签: c# sql-server excel epplus


【解决方案1】:

此代码总是添加一个新行 DataRow newRow = dt.NewRow();,因此您的行不匹配:

for (int row = 12; row <= 26; row++)
{
    DataRow newRow = dt.NewRow(); //Create a row
    //...
    dt.Rows.Add(newRow);                   
}

但如果我理解正确的话,您想将数据设置到特定的数据单元格中。然后你应该找到现有的行并设置单元格值:

DataRow dr = dt.Rows[yourRowNumber];
dr[3] = "Your New Value";

【讨论】:

  • 谢谢,但是有什么解决方案可以将所有范围从 CB037069 移动到 IB093019 设置在第一行,而不是对每个数据单元格都这样做DataRow dr = dt.Rows[1]; dr[0] = dt.Rows[16][0];
  • 或者可以重新排列 //get BookCode from sql server 以及添加新行,以便并排匹配?
  • @Nebula9 对于您的第一个问题:由于DataTableRows 属性具有索引器,因此您可以仅通过索引获取数据。所以没有办法移动所有范围的行。
  • @Nebula9 对于第二个问题:无论如何,您应该匹配来自 SQL 和 Excel 的数据列。或者您可以通过ID 对数据进行排序,然后如果它们共享Id's,则只需插入来自 SQL 和 Excel 的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多