无法从DataGridView获取另一个表单的值

时间:2013-10-31 17:51:44

标签: c# winforms datagridview datatable

我有一个与form分开弹出的DataGridView。它上面有一个DataTable,显示用户访问过的所有网址。所有网址都保存在字符串列表中,然后转换为DataGridView,然后将值放入private DataTable ConvertListToDataTable(List<string> l) { table.Columns.Add("urls"); int i = 0; foreach(string s in l) { table.Rows.Add(); table.Rows[i].SetField("urls", s); i++; } return table; } public void pageload(List<string> list) { table = ConvertListToDataTable(list); dataGridView1.DataSource = table; } private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) { Form1 form = new Form1(); form.pageInput.Text = dataGridView1.SelectedRows.ToString(); string input = form.pageInput.Text; form.loadPage(input); } 。我可以看到带有网址的表格。

我想在单元格上启用双击,这样如果用户双击它,他将被转换回该网址。

选择行(单击url)并将其解析为字符串时出错。看起来它是空的,因为页面没有加载

DataGridView

我尝试将SelectionMode textBox更改为 FullRowSelect CellSelect RowHeaderSelect ,但它没有改变一切。试图更改单元格和行的双击。我还尝试在表单上放置textBox1.Text = dataGridView1.SelectedRows.ToString() 以进行调试。所以当我分配时:

Windows.Forms.DataGridViewSelectedCellCollection

我得到的只是ToString(),所以它绝对是空的。

问题是,如果{{1}}不起作用,我该如何获取该网址值?谢谢您的帮助。

3 个答案:

答案 0 :(得分:0)

如果它是一个集合,你必须以非常方式处理集合中的每个元素。否则.ToString()只会返回元数据中的selectedRows文本,即DataGridViewSelectedCellCollection。

尝试类似的事情,

foreach(elementType i in dataGridView1.SelectedRows)
{
   //do something you want here such as TextBox.Text = TextBox.Text + i.ToString();
}

答案 1 :(得分:0)

我认为你想要/需要的是更像这样的东西:

private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{      
    string URL = "";
    if (dataGridView1[e.ColumnIndex, e.RowIndex].Value != null)
    {  
        //get the URL from the cell that you double-clicked on
        URL = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
    }
    else
        return;

    //put your code to launch the URL in a browser here        
}

另一种选择是使用像这样的MouseDoubleClick事件:

private void dataGridView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    //this will allow us to find out where we clicked in the datagridview
    DataGridView.HitTestInfo hti = dataGridView1.HitTest(e.X, e.Y);

    if (e.Button == MouseButtons.Left && hti.Type == DataGridViewHitTestType.Cell)
    {
        string URL = "";
        if (dataGridView1[hti.ColumnIndex, hti.RowIndex].Value != null)
        {
            //get the URL from the cell that you double-clicked on
            URL = dataGridView1[hti.ColumnIndex, hti.RowIndex].Value.ToString();
        }
        else

            return;
        //put your code to launch the URL in a browser here 
    }
}

答案 2 :(得分:0)

首先,您想要的事件可能是CellDoubleClick()而不是CellContentDoubleClick()

然后这样做:

private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    //Makes sure that a valid cell was double clicked.
    if (e.ColumnIndex > -1 && e.RowIndex > -1)
    {
        Form1 form = new Form1();
        form.pageInput.Text = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
        string input = form.pageInput.Text;
        form.loadPage(input);
    }
}

让我知道这是否有效!