跪求vs2010winform DataGridView单元格高级设置小数位数问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跪求vs2010winform DataGridView单元格高级设置小数位数问题?相关的知识,希望对你有一定的参考价值。

用Column.DefaultCellStyle.Format = "#.##"的话,用户永远只能看见处理过的数据,
我希望实现如下功能,比如单元格数据为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;

            

        

参考技术A

思路是这样的,就算你给单元格改了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;

        

失去焦点时隐藏就可以了,主要思路有了,剩下的改改就可以!

有什么问题再补充!

参考技术B 这种需求就不能用“Column.DefaultCellStyle.Format = "#.##"”这种方式了,用程序向单元格中写数,然后在单元格的双击事件中再写代码取完整数据。 参考技术C 给单元格加双击事件,调整数字格式试试

跪求 lattice FPGA SDI视频处理的例程!!!!

SD HD的视频例程 都好!!

参考技术A 你是想用FPGA来实现HD SDI数据通信?
这个应该没有现成的例子,串行传输倒是很多例子的。
需要就自己按照SDI协议敲一个,应该也不难。

以上是关于跪求vs2010winform DataGridView单元格高级设置小数位数问题?的主要内容,如果未能解决你的问题,请参考以下文章

从 VS2010 升级的 VS2013 winforms 项目中缺少一些图标和文本

在 VS 2010 的 Winforms 项目中添加 WPF 窗口

VS2010在winform中怎么转到html

需要对 VS 2010 winform 组件的建议

winform 别人部署后的项目怎样再用vs2010 打开?

在 VS2010 中分析签名的 WinForm dll