如何以编程方式在DataGridView中选择一行并触发DataGridView.SelectionChanged事件

本文关键字:DataGridView 一行 事件 SelectionChanged 编程 方式 选择 | 更新日期: 2023-09-27 18:08:21

我怎么也弄不明白这个问题。我有一个很长的DataGridView(不允许MultiSelect),当用户提交对数据的更改时,来自网格的数据将被清除并重新绘制(因为更改可能影响多行,这是更简单的方法)。但是,当我尝试以编程方式选择行时,它也不会触发DataGridView。SelectionChanged事件,我用它来显示与DataGridView当前单元格索引相关的数组中的数据。当doMagicStuff执行时,会显示错误索引(特别是索引0)的值。

private void doMagicStuff()
{
    int selRow = myDGV.CurrentCell.RowIndex;
    myDGV.Rows.Clear();
    /*Perform Task, Redraw data*/
    myDGV.CurrentCell = myDGV[selRow, 0];
}
private void myDGV_SelectionChanged(object sender, EventArgs e)
{
    Label1.Text = myDisplayValue1[myDGV.CurrentCell.RowIndex];
    Label2.Text = myDisplayValue2[myDGV.CurrentCell.RowIndex];
    TextBox1.Text = myEditValue1[myDGV.CurrentCell.RowIndex];
    TextBox2.Text = myEditValue2[myDGV.CurrentCell.RowIndex];
}

如何以编程方式在DataGridView中选择一行并触发DataGridView.SelectionChanged事件

确保您的客户端设置和OnSelectedIndexChanged设置如下:净AJAX)

。aspx页

<telerik:RadGrid ID="Grid1" runat="server" OnSelectedIndexChanged="Grid1_SelectedIndexChanged" OnItemDataBound="Grid1_ItemDataBound" OnPreRender="Grid1_PreRender">
             <ClientSettings EnablePostBackOnRowClick="true">
                      <Selecting AllowRowSelect="true"></Selecting>
             </ClientSettings>
</telerik:RadGrid>


aspx.cs页

protected void Grid1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string value = null;
        foreach(GridDataItem item in Grid1.SelectedItems)
        {
            //column name is in doub quotes
            value = item["Name"].Text;
        }
    }

在表单中添加一个按钮点击来测试DataGridView中的选定值。双击那个按钮,然后把这段代码粘贴到这里

foreach (DataGridViewRow row in myDGV.SelectedRows)
{
    Label1.Text = //This should be hard coded the only thing that should change dynamically is the TextBox Values 
    Label2.Text = //This should be hard coded the only thing that should change dynamically is the TextBox Values 
    TextBox1.Text = row.Cells[0].Value.ToString();//change the 0 or 1 to fit your column Index position 
    TextBox2.Text = row.Cells[2].Value.ToString();  
}

如果你有4列和4个文本框,那么你将分配所有的文本框。foreach循环中的文本值遵循模式并将索引增加1,因此2个文本框表示行。Cells[0]是第一列行。