如何使用辅助文本框编辑datagridview单元格?

时间:2015-12-03 08:52:50

标签: c# winforms datagridview

我的 form1 datagridview(2列,1列ID,1列文字)。

我也有"edit button"。当我点击"edit button"时,文本列将在 form2 的文本框中显示。

form2 我有" select button"编辑路径和"save button"

如何通过按"save button" form2 中已编辑的文本传递到form1中的列datagridview。

form1 中的代码编辑按钮(dgv_sourcefolder是datagridview1):

private void DGV_sourcefolder_CellClick(object sender, DataGridViewCellEventArgs e)
    {          
        if (DGV_sourcefolder.Columns[e.ColumnIndex].Name == "Edit")
        {
            string y = "";
            int i;
            i = ((DataGridView)sender).SelectedCells[0].RowIndex;
            y = ((DataGridView)sender).Rows[i].Cells[1].Value.ToString();
            //MessageBox.Show(y.ToString());
            DTO.data = y;
            Form2 form = new Form2();
            form.Show();
            Hide();
        }
    }

form2中的代码选择按钮:

private void Btn_select_Click(object sender, EventArgs e)
    {          
        FolderBrowserDialog fbd = new FolderBrowserDialog();         
        if(fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            textBox1.Text = fbd.SelectedPath;
        }

    }

2 个答案:

答案 0 :(得分:0)

你的表格应该是这样的。

public class Form2 : Form 
    {

        private DataGridViewRow dataGridViewRow;
        public Form2(DataGridViewRow row) 
        {
            dataGridViewRow = row;
        }
        private void Btn_select_Click(object sender, EventArgs e)
        { 
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
               textBox1.Text = fbd.SelectedPath;
            }

        }
        private void Btn_Save_Click(object sender, EventArgs e)
        { 
             this.dataGridViewRow.Cells[1].Value = textBox1.Text;
        }
    }

它的主要形式

private void DGV_sourcefolder_CellClick(object sender, DataGridViewCellEventArgs e)
    {          
        if (DGV_sourcefolder.Columns[e.ColumnIndex].Name == "Edit")
        {
            string y = "";
            int i;
            i = ((DataGridView)sender).SelectedCells[0].RowIndex;
            y = ((DataGridView)sender).Rows[i].Cells[1].Value.ToString();
            //MessageBox.Show(y.ToString());
            DTO.data = y;
            var row =  ((DataGridView)sender).Rows[i];
            Form2 form = new Form2(row);
            form.Show();
            Hide();
        }
    }

答案 1 :(得分:0)

不假设数据网格中的数据,您可以使用DataGridViewCell的ParseFormattedValue方法和FormatedValue属性来使form2中的文本框的行为与数据网格中的文本框一样。如果您不在数据网格中使用字符串作为值类型,这将有所帮助。

public Form2
{
    TextBox _myTextBox; 
    public Form2()
    { ... }

    public DataGridViewCell CurrentCell {get;set;}

    protected override void OnLoad()
    {
        Assert(CurrentCell != null);
        _myTextBox = CurrentCell.FormatedValue;
    }

    public SubmitBtn_clicked(...)
    {
        try
        {
           var cellValue = CurrentCell.ParseFormattedValue(_myTextBox.Text,  
                     CurrentCell.Style, (TypeConverter)null, (TypeConverter)null);
           CurrentCell.Value = cellValue;
        }
        catch(FormatException)
        {/*user entered value that cant be parsed*/ }
        catch(ArgumentException)
        {/*_myTextBox.Text was null or cell's FormattedValueType is not string*/}
    }
}