【问题标题】:how to set datagridview column is left side of a datagridview如何设置datagridview列在datagridview的左侧
【发布时间】:2016-05-05 06:28:55
【问题描述】:

我必须在我的项目中使用 datagridview,所以需要在 datagridview 的左侧显示 datagridview 列,例如,

             column 1       column 2
-------------------------------------------
column 1 

column 2 

...

`// TODO: This line of code loads data into the 'hRPayDataSet.employee' table. You can move, or remove it, as needed.

 this.employeeTableAdapter.Fill(this.hRPayDataSet.employee);       
 dataGridView1.DataSource =employeeBindingSource;

 DataTable table2 = (DataTable)(dataGridView1.DataSource);
 dataGridView1.DataSource = null;
 DataTable tTable = null;
 try { tTable = GenerateTransposedTable(table2); }
 catch (Exception ex) { MessageBox.Show(ex.Message); }
 dataGridView1.DataSource = tTable;
 dataGridView1.RowHeadersVisible = true;
 dataGridView1.ColumnHeadersVisible = false;`

请帮帮我....

【问题讨论】:

  • 为什么需要第 1 列作为列和行?您是否尝试将矩阵格式数据绘制到数据网格?
  • 是的@Arul manivannan
  • 如图所示,这是没有意义的。也许您想旋转/切换行和列?
  • 是的,我想旋转行和列,但我不能

标签: c# winforms datagridview


【解决方案1】:

你可以试试这个:首先将你的DataGridView绑定到DataTable

DataTable table = (DataTable)(dataGridView1.DataSource);
DataTable tTable = null;
try
{
    tTable = GenerateTransposedTable(table);
}
catch(Exception ex)
{
    MessageBox.Show(ex.Message);
}

dataGridView1.DataSource = tTable;
dataGridView1.RowHeadersVisible = true;
dataGridView1.ColumnHeadersVisible = false;

GenerateTransposedTable 转置你的table

private DataTable GenerateTransposedTable(DataTable inputTable)
{
    DataTable outputTable = new DataTable();

    outputTable.Columns.Add(inputTable.Columns[0].ColumnName.ToString());

    foreach (DataRow inRow in inputTable.Rows)
    {
        string newColName = inRow[0].ToString();
        outputTable.Columns.Add(newColName);
    }

    for (int rCount = 0; rCount <= inputTable.Columns.Count - 1; rCount++)
    {
        DataRow newRow = outputTable.NewRow();

        newRow[0] = inputTable.Columns[rCount].ColumnName.ToString();
        for (int cCount = 0; cCount <= inputTable.Rows.Count - 1; cCount++)
        {
            string colValue = inputTable.Rows[cCount][rCount].ToString();
            newRow[cCount + 1] = colValue;
        }
        outputTable.Rows.Add(newRow);
    }

    return outputTable;
}

测试代码:

private void Form1_Load(object sender, EventArgs e)
{
    DataTable table = new DataTable();
    table.Columns.Add("A");
    table.Columns.Add("B");
    table.Columns.Add("C");
    table.Columns.Add("D");
    table.Columns.Add("E");
    table.Columns.Add("F");

    dataGridView2.DataSource = table;

    DataTable table2 = (DataTable)(dataGridView2.DataSource);
    DataTable tTable = null;
    try
    {
        tTable = GenerateTransposedTable(table2);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    dataGridView2.DataSource = tTable;
    dataGridView2.RowHeadersVisible = true;
    dataGridView2.ColumnHeadersVisible = false;
}

更新 2:

用这个替换你的代码:

// TODO: This line of code loads data into the 'hRPayDataSet.employee' table. You can move, or remove it, as needed.

this.employeeTableAdapter.Fill(this.hRPayDataSet.employee);
dataGridView1.DataSource = employeeBindingSource;

var bds = (BindingSource)(dataGridView1.DataSource);
HRPayDataSet ds = (HRPayDataSet)bds.DataSource;

DataTable dt = TransposeTable(ds.Tables[0]);
dataGridView1.Columns.Clear();
dataGridView1.DataSource = null;
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = dt;

新的TransposeTable() 方法:

private DataTable TransposeTable(DataTable inputTable)
{
    DataTable outputTable = new DataTable();

    for (int i = 0; i < inputTable.Rows.Count; i++)
    {
        outputTable.Columns.Add("col" + i);
    }

    for (int rCount = 0; rCount <= inputTable.Columns.Count - 1; rCount++)
    {
        DataRow newRow = outputTable.NewRow();
        newRow[0] = inputTable.Columns[rCount].ColumnName.ToString();
        for (int cCount = 0; cCount <= inputTable.Rows.Count - 2; cCount++)
        {
            string colValue = inputTable.Rows[cCount][rCount].ToString();
            newRow[cCount + 1] = colValue;
        }
        outputTable.Rows.Add(newRow);
    }
    return outputTable;
}

【讨论】:

  • 我在 DataTable 表 = (DataTable)(dataGridView1.DataSource) 上遇到异常 Unable to cast object of type 'System.Windows.Forms.BindingSource' to type 'System.Data.DataTable'.
  • 如何绑定dataGridView
  • 使用 dtagridview 属性
  • 当你将一些数据绑定到你的dataGridView时,你能给我一个代码吗?
  • 不管怎样,在那之前你可以试试var dbs = (BindingSource)dataGridView2.DataSource; DataTable table = (DataTable)dbs.DataSource;而不是DataTable table = (DataTable)(dataGridView1.DataSource);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 2011-05-29
相关资源
最近更新 更多