C# 调用RowCommand";选择";在GridView上以编程方式

C# 调用RowCommand";选择";在GridView上以编程方式,c#,asp.net,gridview,C#,Asp.net,Gridview,我的目标是根据请求参数在gridview中选择一行打开FormView 首先,我在页面加载中获取参数: 基于此,我希望在GridView中获得相应的行(称为gvPrincipal)并选择它: 问题2:在GridView中,页面索引按预期更新,但行(应该是彩色的)没有更新 此外,每行上都有一个ImageButton: FormView数据源使用gvPrincipalValue更新: 不幸的是什么也没发生 行未保持未选中状态是我最关心的问题,如何克服此问题?以下是在C中手动调用rowCommand的

我的目标是根据请求参数在gridview中选择一行打开FormView

首先,我在页面加载中获取参数:

基于此,我希望在GridView中获得相应的行(称为gvPrincipal)并选择它:

问题2:在GridView中,页面索引按预期更新,但行(应该是彩色的)没有更新

此外,每行上都有一个ImageButton:

FormView数据源使用gvPrincipalValue更新:

不幸的是什么也没发生


行未保持未选中状态是我最关心的问题,如何克服此问题?

以下是在C中手动调用rowCommand的方法#

MyGridView_RowCommand(MyGridView,新GridViewCommandEventArgs(imgButton,新CommandEventArgs(imgButton.CommandName,imgButton.CommandArgument))

MyGridView是一个GridView。 imgButton是位于MyGridView中的特定GridViewRow中的ImageButton,我正在调用它的row命令。我正在对同样位于MyGridView中的复选框调用此RowCommand,但复选框通常不能作为row命令中的图像按钮处理

    protected void MyCheckBoxInGrid_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox chk = sender as CheckBox;

        GridViewRow row = ((GridViewRow)chk.NamingContainer);



        if (chk.Checked)
        {


            ImageButton imgButton = row.FindControl("ImgDetail") as ImageButton;
            MyGridView_RowCommand(MyGridView, new GridViewCommandEventArgs(imgButton , new CommandEventArgs(imgButton .CommandName, imgButton .CommandArgument)));
        }}
问候! 扎希德·阿什拉夫

public void SelectRowByDataKeyValue(string value)
{
    gvPrincipal.DataBind();

    int tmpSelectedIndex = 0;
    int tmpPageIndex = 0;

    for (int page = 0; page < gvPrincipal.PageCount; page++)
    {
        gvPrincipal.PageIndex = page;

        gvPrincipal.DataBind();

        for (int key = 0; key < gvPrincipal.DataKeys.Count; key++)
        {
            if (!string.IsNullOrEmpty(value) && value.Equals(Convert.ToString(gvPrincipal.DataKeys[key].Value)))
            {
                tmpSelectedIndex = key;
                tmpPageIndex = page;
                break;
            }
        }
    }

    gvPrincipal.PageIndex = tmpPageIndex;
    gvPrincipal.SelectedIndex = tmpSelectedIndex;

    gvPrincipal.SelectRow(tmpSelectedIndex);

}
protected void gvPrincipal_SelectedIndexChanged(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine(String.Format("Selected Index : {0}, SelectedValue : {1}", gvPrincipal.SelectedIndex, /*wrong value*/gvPrincipal.SelectedValue));
}
<Columns>
...
<asp:TemplateField>
      <ItemTemplate>
            <asp:ImageButton ID="ImgBtnDetail" runat="server" 
                CommandName="Select"
                CausesValidation="False" ImageUrl="~/Images/icon_detail_16.gif"/>
      </ItemTemplate>
</asp:TemplateField>
...
</Columns>
protected void gvPrincipal_RowCommand(object sender, GridViewCommandEventArgs e)
{
    //displays infos
}
        <asp:ObjectDataSource ID="odsfvPrincipalDetail" runat="server" TypeName="crm.dal"
        SelectMethod="SelectElementById">        
        <SelectParameters>
            <asp:ControlParameter ControlID="gvPrincipal" Name="id" PropertyName="SelectedValue" Type="String" />
        </SelectParameters>          
    </asp:ObjectDataSource>
public void SelectRowByDataKeyValue(string value)
{
    ...

    GridViewRow row = gvPrincipal.SelectedRow;

    ImageButton ImgBtnDetail = (ImageButton)row.FindControl("ImgBtnDetail");

    CommandEventArgs args = new CommandEventArgs("Select", null);

    gvPrincipal_RowCommand(this, new GridViewCommandEventArgs(row, ImgBtnDetail, args));

}
    protected void MyCheckBoxInGrid_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox chk = sender as CheckBox;

        GridViewRow row = ((GridViewRow)chk.NamingContainer);



        if (chk.Checked)
        {


            ImageButton imgButton = row.FindControl("ImgDetail") as ImageButton;
            MyGridView_RowCommand(MyGridView, new GridViewCommandEventArgs(imgButton , new CommandEventArgs(imgButton .CommandName, imgButton .CommandArgument)));
        }}