跪求vs2010winform DataGridView单元格高级设置小数位数问题?
我希望实现如下功能,比如单元格数据为15.1231,在datagridview绑定数据并显示后,该单元格数据保留两位小数,当用户双击该单元格后,显示完整数据。请各位大虾们帮帮忙!急急急急急急急~ 展开
第一方法用于对你原有数据进行一些数据格式列的添加,以及绑定
那么在第一个方法中你可以用这种列添加的方式,也可以用变量来暂时存储临时数据,例如在点击事件中将这个值取出来保存在一个全局变量中,然后在离开事件中再将这个变量的值给这个cell,都可以
第二个和第三个方法是DataGridView的事件,用于你的双击和离开后的显示值转换
不明白话,再HI我吧
private void button1_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
DataColumn dcId = new DataColumn("id");
DataColumn dcValue = new DataColumn("value");
dt.Columns.Add(dcId);
dt.Columns.Add(dcValue);
DataRow dr = dt.NewRow();
dr[0] = 1;
dr[1] = 123.456;
dt.Rows.Add(dr);
DataColumn tempValue = new DataColumn("tempTypeValue");
dt.Columns.Add(tempValue);
DataColumn typeValue = new DataColumn("typeValue");
dt.Columns.Add(typeValue);
foreach (DataRow dritem in dt.Rows)
{
dritem["tempTypeValue"] = float.Parse(dritem["value"].ToString()).ToString("F2");
dritem["typeValue"] = float.Parse(dritem["value"].ToString()).ToString("F2");
}
dataGridView1.DataSource = dt;
foreach (DataGridViewColumn dgvc in dataGridView1.Columns)
{
dgvc.Visible = dgvc.Name == "tempTypeValue" || dgvc.Name == "value" ? false : true;
}
}
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["typeValue"].Index)
{
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = dataGridView1.Rows[e.RowIndex].Cells["value"].Value;
}
}
private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["typeValue"].Index)
{
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = dataGridView1.Rows[e.RowIndex].Cells["tempTypeValue"].Value;
}
}
思路是这样的,就算你给单元格改了Format,但其实单元格的值还是没变,那么你给datagridview绑定一个textbox控件,用它来显示完整的值!
代码如下(部分):
TextBox tb = new TextBox();//定义一个textbox
tb.Visible = false;
dataGridView1.Controls.Add(tb);//将textbox添加到datagridview中
tb.Height = dataGridView1.GetCellDisplayRectangle(dataGridView1.CurrentCell.ColumnIndex, dataGridView1.CurrentCell.RowIndex, true).Height;//设置tb的高度
tb.Width = dataGridView1.GetCellDisplayRectangle(dataGridView1.CurrentCell.ColumnIndex, dataGridView1.CurrentCell.RowIndex, true).Width;//设置tb的宽度
//datagridview的单击事件,用于显示tb
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
tb.Location = dataGridView1.GetCellDisplayRectangle(dataGridView1.CurrentCell.ColumnIndex, dataGridView1.CurrentCell.RowIndex, true).Location;//设置坐标
tb.Text = dataGridView1.SelectedCells[0].Value.ToString();//给tb赋值
tb.Visible = true;
}
失去焦点时隐藏就可以了,主要思路有了,剩下的改改就可以!
有什么问题再补充!