簡體   English   中英

如何使用C#WinForms在綁定的DataGridView中顯示未綁定的列

[英]How to show unbound columns in a bound DataGridView using c# winforms

我有一個DataGridView,如下所示.DataGridView有7列,其中第1列,第4列和第6列將是未綁定的,其余的將是綁定列。現在我的要求是

1]在[0]列中,我想顯示一個自動遞增的整數值,例如“序列號”。 1,2,3 ..... n

2]在列[4]上,我想顯示圖像列表中的圖標/圖像。

3]在列[6]上,我想顯示一個Button控件

      try
        {
            using (FbConnection conLLV = new FbConnection(connectionString))
            {
                conLLV.Open();
                using (FbCommand cmdLLV = new FbCommand(sqlQryLLV, conLLV))
                {
                    cmdLLV.Parameters.Add("@t_id", FbDbType.Integer).Value = tid;
                    cmdLLV.Parameters.Add("@mem_id", FbDbType.Integer).Value = mid;
                    cmdLLV.CommandType = CommandType.Text;
                    using (FbDataAdapter daLLV = new FbDataAdapter(cmdLLV))
                    {
                        using (DataTable dtLLV = new DataTable())
                        {
                            daLLV.Fill(dtLLV);

                            dgSSW.AutoGenerateColumns = false;
                            dgSSW.ColumnCount = 7;

                            //At Column[0] ->a Serial No column

                            dgSSW.Columns[1].Name = "subsec_name";
                            dgSSW.Columns[1].HeaderText = "Sub Section Name";
                            dgSSW.Columns[1].DataPropertyName = "subsec_name";

                            dgSSW.Columns[2].Name = "rt_correct_ans";
                            dgSSW.Columns[2].HeaderText = "Correct Answer";
                            dgSSW.Columns[2].DataPropertyName = "rt_correct_ans";

                            dgSSW.Columns[3].Name = "rt_your_ans";
                            dgSSW.Columns[3].HeaderText = "Your Answer";
                            dgSSW.Columns[3].DataPropertyName = "rt_your_ans";

                            //At Column[4] ->an Image column

                            dgSSW.Columns[5].Name = "q_r_difficulty";
                            dgSSW.Columns[5].HeaderText = "Difficulty Level";
                            dgSSW.Columns[5].DataPropertyName = "q_r_difficulty";

                            //At Column[6] ->a column having a Button control

                            dgSSW.DataSource = dtLLV;
                        }//data table closed and disposed here
                    }// data adapter closed and disposed up here
                 }// command disposed here
            }//connection closed and disposed here
        } 
        catch (FbException ex)
        {
            MessageBox.Show("LLV--" + ex.Message);
        }

我如何達到我的要求,請提供使用代碼的建議。我已經搜索了互聯網,但給出的解決方案與我的要求不符。

可能的解決方案:

0]設置數據源

dgSSW.DataSource = dtLLV;

1]行號:為其添加列並應用單元格格式

var col0 = new DataGridViewTextBoxColumn
    {
        HeaderText = "#", Name="RowNum", 
        ReadOnly = true, 
        Width = 10
    };
dgSSW.Columns.Insert(0, col0);

dgSSW.CellFormatting += GridCellFormatting;

private void GridCellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (dgSSW.Columns[e.ColumnIndex].Name == "RowNum")
    {
        e.Value = (e.RowIndex + 1).ToString();
    }
}

2]圖片欄:

var col3 = new DataGridViewImageColumn { HeaderText = "Pic", Name = "Pic" };
dgSSW.Columns.Insert(4, col3);

// set image for a cell
dgSSW["Pic", 0].Value = Resources.add;

3]帶有點擊處理的按鈕列

var col7 = new DataGridViewButtonColumn
    {
        HeaderText = "Proceed", Name = "Action", 
        Text = "+",
        UseColumnTextForButtonValue = true
    };
dgSSW.Columns.Add(col7);

dgSSW.CellContentClick += GridCellContentClick; 

private void GridCellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (dgSSW.Columns[e.ColumnIndex].Name == "Action")
    {
        MessageBox.Show((e.RowIndex + 1).ToString());
    }
}

更新 :由於您不使用AutoGenerateColumns並手動創建所有列,因此可以創建所有col0,col3,col7,然后再設置DataSource

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM