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