這段時間需要使用DataGridView,故來總結一下
首先需要做的是連接數(shù)據(jù)庫取胎,獲得數(shù)據(jù)
string str_con = @"Data Source=.;Integrated Security=sspi;Initial Catalog=testDB;";
string sql = "select * from Person";
SqlConnection conn = new SqlConnection(str_con);
conn.Open();
SqlCommand comm = new SqlCommand(sql, conn);
SqlDataAdapter da = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
da.Fill(ds, "Person");
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "Person";
conn.Close();
這邊就不多說了,我的項目里是從類里取得數(shù)據(jù)
dataGridView1.DataSource = 類名;
(1)修改行頭和寬度
dataGridView1.Columns[0].HeaderText = "類別";
dataGridView1.Columns[1].HeaderText = "開始時間";
dataGridView1.Columns[2].HeaderText = "結束時間";
dataGridView1.Columns[0].Width = 80;
dataGridView1.Columns[1].Width = 150;
dataGridView1.Columns[2].Width = 150;
(2)添加CheckBox選擇框
DataGridViewCheckBoxColumn column1 = new DataGridViewCheckBoxColumn();
{
column1.HeaderText = "選擇";
column1.Name = "check1";
column1.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
column1.FlatStyle = FlatStyle.Standard;
//顯示選擇框的三種狀態(tài)
column1.ThreeState = true;
}
dataGridView1.Columns.Insert(0, column1);//插入到最前面
這里說明DataGridView可以添加6中按鈕控件,除了CheckBox還有Button、TextBox城看、Image、Link和ComboBox杏慰,用法都是一樣的
(3)隱藏新增行和列頭
dataGridView1.RowHeadersVisible = false;
dataGridView1.AllowUserToAddRows = false;
(4)設置字體居中顯示
dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView1.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
(5)設定包括Header和所有單元格的列寬和行高自動調(diào)整
GV_Visit.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
GV_Visit.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
(6)設置行首和左上角的文字
dataGridView1.Rows[0].HeaderCell.Value = "第1行";
/dataGridView1.TopLeftHeaderCell.Value = "左上角";
(7)取得選定的行测柠、列、單元格
//選定的單元格
foreach (DataGridViewCell c in dataGridView1.SelectedCells)
{
string cr = string.Format("{0},{1}", c.ColumnIndex, c.RowIndex);
listBox1.Items.Add("選定的單元格位置是:" + cr);
}
//選定的行/列
foreach (DataGridViewRow c in dataGridView1.SelectedRows)
{
listBox1.Items.Add("選定的行是:" + c.Index);
}
foreach (DataGridViewColumn c in dataGridView1.SelectedColumns)
{
listBox1.Items.Add("選定的列是:" + c.Index);
}
(8)刪除行缘滥、列
//刪除指定行
dataGridView1.Columns.RemoveAt(0);
dataGridView1.Columns.Remove("Name");
//刪除指定列
dataGridView1.Rows.RemoveAt(0);
//刪除多行
foreach (DataGridViewRow r in dataGridView1.SelectedRows)
{
if (r.IsNewRow == false)
{
dataGridView1.Rows.Remove(r);
}
}
(9)因為我的項目里新增了CheckBox選擇框轰胁,我想實現(xiàn)單選需要在CellContentClick事件中說明
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
int count = Convert.ToInt16(dataGridView1.Rows.Count.ToString());
for (int i = 0; i < count; i++)
{
DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells["check1"];
Boolean flag = Convert.ToBoolean(checkCell.Value);
if (flag == true) //查找被選擇的數(shù)據(jù)行
{
checkCell.Value = false;
}
else
{
continue;
}
}
}
(10)獲取到選擇的行的數(shù)據(jù)
string IData = "";
int count = Convert.ToInt32(dataGridView1.Rows.Count.ToString());//獲取到總行數(shù)
for (int i = 0; i < count; i++)
{
//如果DataGridView是可編輯的,將數(shù)據(jù)提交朝扼,否則處于編輯狀態(tài)的行無法取到
dataGridView1.EndEdit();
//獲取到選擇的行數(shù)
DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)GV_Visit.Rows[i].Cells["check1"];
Boolean flag = Convert.ToBoolean(checkCell.Value);
if (flag == true)//查找被選擇的數(shù)據(jù)行
{
for (int j = 1; j < dataGridView1.ColumnCount; j++)
{
//從 DataGridView中獲取某行某列的數(shù)據(jù)項
string data = dataGridView1.Rows[i].Cells[j].Value.ToString().Trim();
IData += data + ",";
}
//如果只需要取某一列的值赃阀,那就不需要遍歷列了
//string data = dataGridView1.Rows[i].Cells[列數(shù)].Value.ToString().Trim();
}
}
if (!string.IsNullOrEmpty(IData))
{
MessageBox.Show(IData.TrimEnd(','));
}
(11)獲得列名為“**”的列
因為在項目中,經(jīng)常有關于性別或其他的擎颖,在數(shù)據(jù)庫中儲存為0/1榛斯,在頁面顯示需要表示為男/女或真/假之類的
int num= dataGridView1.Columns["Gender"].Index;
//獲得列名叫Gender的列的索引
//通過遍歷所有的行,值為0則是男反之則為女
for (int i = 0; i < dataGridView1.RowCount; i++)
{
if (dataGridView1.Rows[i].Cells[num].Value.ToString().Trim() == "0")
{
dataGridView1.Rows[i].Cells[num].Value = "男";
}
else
{
dataGridView1.Rows[i].Cells[num].Value = "女";
}
}