none
C# Winform DataGridView控件即时计算金额问题 RRS feed

  • 问题

  • C# Winform DataGridView控件中,如何修改变数量后,立即计算金额,而不是焦点离开数量单元格才计算金额(数量x单价=金额)?

    需要在什么事件中写代码?才会有即时计算效果?

    2012年9月8日 10:19

答案

  •  public partial class Form1 : Form
        {
            private int rowIndex = 0;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("数量", typeof(int));
                dt.Columns.Add("单价", typeof(int));
                dt.Columns.Add("总价", typeof(int));
    
    
                //随机生成数据
                Random r = new Random(Guid.NewGuid().GetHashCode());
                for (int i = 1; i < 11; i++)
                {
                    dt.Rows.Add(r.Next(1, 6), r.Next(1000, 2001));
                }
                dataGridView1.DataSource = dt;
                dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing;
            }
    
            void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                if (e.Control is DataGridViewTextBoxEditingControl)
                {
                    DataGridViewTextBoxEditingControl dc = e.Control as DataGridViewTextBoxEditingControl;
                    dc.TextChanged += dc_TextChanged;
                    rowIndex = dc.EditingControlRowIndex;
                }
            }
    
            void dc_TextChanged(object sender, EventArgs e)
            {
                DataGridViewTextBoxEditingControl c= sender as DataGridViewTextBoxEditingControl;
                dataGridView1.Rows[rowIndex].Cells[2].Value = Convert.ToInt32(c.Text) * Convert.ToInt32(dataGridView1.Rows[rowIndex].Cells[1].Value);
            }
           
        }

    假设你的界面上只有一个dataGridView控件。


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年9月8日 11:05
    版主

全部回复

  • C# Winform DataGridView控件中,如何修改变数量后,立即计算金额,而不是焦点离开数量单元格才计算金额(数量x单价=金额)?

    需要在什么事件中写代码?才会有即时计算效果?

    想实类似TextBox控件中TextChanged事件的效果,当值一改变(此时焦点没改变)立即触发事件去改变金额的值.
    2012年9月8日 10:27
  •  public partial class Form1 : Form
        {
            private int rowIndex = 0;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("数量", typeof(int));
                dt.Columns.Add("单价", typeof(int));
                dt.Columns.Add("总价", typeof(int));
    
    
                //随机生成数据
                Random r = new Random(Guid.NewGuid().GetHashCode());
                for (int i = 1; i < 11; i++)
                {
                    dt.Rows.Add(r.Next(1, 6), r.Next(1000, 2001));
                }
                dataGridView1.DataSource = dt;
                dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing;
            }
    
            void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                if (e.Control is DataGridViewTextBoxEditingControl)
                {
                    DataGridViewTextBoxEditingControl dc = e.Control as DataGridViewTextBoxEditingControl;
                    dc.TextChanged += dc_TextChanged;
                    rowIndex = dc.EditingControlRowIndex;
                }
            }
    
            void dc_TextChanged(object sender, EventArgs e)
            {
                DataGridViewTextBoxEditingControl c= sender as DataGridViewTextBoxEditingControl;
                dataGridView1.Rows[rowIndex].Cells[2].Value = Convert.ToInt32(c.Text) * Convert.ToInt32(dataGridView1.Rows[rowIndex].Cells[1].Value);
            }
           
        }

    假设你的界面上只有一个dataGridView控件。


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年9月8日 11:05
    版主
  •  public partial class Form1 : Form
        {
            private int rowIndex = 0;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("数量", typeof(int));
                dt.Columns.Add("单价", typeof(int));
                dt.Columns.Add("总价", typeof(int));
    
    
                //随机生成数据
                Random r = new Random(Guid.NewGuid().GetHashCode());
                for (int i = 1; i < 11; i++)
                {
                    dt.Rows.Add(r.Next(1, 6), r.Next(1000, 2001));
                }
                dataGridView1.DataSource = dt;
                dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing;
            }
    
            void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
            {
                if (e.Control is DataGridViewTextBoxEditingControl)
                {
                    DataGridViewTextBoxEditingControl dc = e.Control as DataGridViewTextBoxEditingControl;
                    dc.TextChanged += dc_TextChanged;
                    rowIndex = dc.EditingControlRowIndex;
                }
            }
    
            void dc_TextChanged(object sender, EventArgs e)
            {
                DataGridViewTextBoxEditingControl c= sender as DataGridViewTextBoxEditingControl;
                dataGridView1.Rows[rowIndex].Cells[2].Value = Convert.ToInt32(c.Text) * Convert.ToInt32(dataGridView1.Rows[rowIndex].Cells[1].Value);
            }
           
        }

    假设你的界面上只有一个dataGridView控件。


          谢谢编程志愿者!太给力了!
    2012年9月9日 1:09
  • 不必谢,互帮互助,欢迎常来!可以的话不要忘记标记答案……

    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年9月9日 2:26
    版主