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

用Column.DefaultCellStyle.Format="#.##"的话,用户永远只能看见处理过的数据,我希望实现如下功能,比如单元格数据为15.1231,在da... 用Column.DefaultCellStyle.Format = "#.##"的话,用户永远只能看见处理过的数据,
我希望实现如下功能,比如单元格数据为15.1231,在datagridview绑定数据并显示后,该单元格数据保留两位小数,当用户双击该单元格后,显示完整数据。请各位大虾们帮帮忙!急急急急急急急~
展开
 我来答
bxfc
2011-03-10 · TA获得超过872个赞
知道小有建树答主
回答量:1104
采纳率:0%
帮助的人:684万
展开全部

第一方法用于对你原有数据进行一些数据格式列的添加,以及绑定

  那么在第一个方法中你可以用这种列添加的方式,也可以用变量来暂时存储临时数据,例如在点击事件中将这个值取出来保存在一个全局变量中,然后在离开事件中再将这个变量的值给这个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;

            }

        }

楼上云
2011-03-09 · TA获得超过1257个赞
知道小有建树答主
回答量:275
采纳率:100%
帮助的人:261万
展开全部

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

        }

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

有什么问题再补充!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dhslxx
2011-03-09 · 超过28用户采纳过TA的回答
知道答主
回答量:131
采纳率:0%
帮助的人:63.9万
展开全部
这种需求就不能用“Column.DefaultCellStyle.Format = "#.##"”这种方式了,用程序向单元格中写数,然后在单元格的双击事件中再写代码取完整数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
depluin
2011-03-09 · TA获得超过3179个赞
知道大有可为答主
回答量:3378
采纳率:75%
帮助的人:2486万
展开全部
给单元格加双击事件,调整数字格式试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式