2

我有一个form与主要的分开弹出的。它上面有一个DataGridView显示用户访问过的所有网址。所有的 url 都保存在一个字符串列表中,然后转换为DataTable,然后我将值放入DataGridView. 我可以看到带有网址的表格。

我想启用双击单元格,这样如果用户双击它,他将被转换为返回该 URL。

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

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);
    }

我试图将其更改DataGridView SelectionModeFullRowSelectCellSelectRowHeaderSelect但它没有改变任何东西。试图更改单元格和行的双击。我还尝试textBox在表单上放置一个用于调试目的。所以当我分配时:

textBox1.Text = dataGridView1.SelectedRows.ToString()

我得到的只是Windows.Forms.DataGridViewSelectedCellCollection,所以它肯定是空的。

ToString()问题是如果不工作,我怎样才能找回那个 url 值?谢谢您的帮助。

4

3 回答 3

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 
    }
}
于 2013-10-31T20:38:05.043 回答
0

如果它是一个集合,则必须单独处理集合中的每个元素,否则 .ToString() 只会将元数据中的 selectedRows 的文本返回给您,即 DataGridViewSelectedCellCollection。

尝试类似的东西,

foreach(elementType i in dataGridView1.SelectedRows)
{
   //do something you want here such as TextBox.Text = TextBox.Text + i.ToString();
}
于 2013-10-31T18:08:54.517 回答
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);
    }
}

让我知道这个是否奏效!

于 2013-10-31T20:43:28.437 回答