C# gridview中的最后一行未到达rowCommand代码块
我有一个gridview,其中rowCommand设置为其中一列。一切正常,但我在gridview中的每一行都遇到了这个奇怪的错误。RowCommand块不执行。除最后一行外,所有其他行都工作。如果我对网格视图进行排序,最后一行出现在顶部,它工作正常,但任何一行出现在底部,同样不工作C# gridview中的最后一行未到达rowCommand代码块,c#,asp.net,webforms,C#,Asp.net,Webforms,我有一个gridview,其中rowCommand设置为其中一列。一切正常,但我在gridview中的每一行都遇到了这个奇怪的错误。RowCommand块不执行。除最后一行外,所有其他行都工作。如果我对网格视图进行排序,最后一行出现在顶部,它工作正常,但任何一行出现在底部,同样不工作 <asp:GridView id="gvSchedules" runat="server" AutoGenerateColumns="False" DataSourceID="odsSchedules" Al
<asp:GridView id="gvSchedules" runat="server" AutoGenerateColumns="False"
DataSourceID="odsSchedules" AllowPaging="True" AllowSorting="True" EmptyDataText="gvSchedules"
OnRowCommand="gvSchedules_RowCommand" CssSelectorClass="NormalGridView"
EnableViewState="false">
<Columns>
<asp:TemplateField SortExpression="ScheduleName" HeaderText="gvSchedulesName">
<ItemStyle Width="100%"></ItemStyle>
<HeaderStyle Wrap="false" />
<ItemTemplate>
<asp:hyperlink id="lnkEdit" runat="server" NavigateUrl='<%# EditUrl("ScheduleID", Eval("ScheduleID").ToString(), "edit", "SpaceID=" + PanelSecurity.PackageId) %>'>
<%# PortalAntiXSS.Encode((string)Eval("ScheduleName")) %>
</asp:hyperlink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="ScheduleTypeID" HeaderText="gvSchedulesType"
ItemStyle-Wrap="false" HeaderStyle-Wrap="false">
<ItemTemplate>
<%# GetSharedLocalizedString("ScheduleType." + Eval("ScheduleTypeID").ToString()) %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="NextRun" SortExpression="NextRun" HeaderText="gvSchedulesNextRun"
ItemStyle-Wrap="false" HeaderStyle-Wrap="false"></asp:BoundField>
<asp:BoundField DataField="LastRun" SortExpression="LastRun" HeaderText="gvSchedulesLastRun"
ItemStyle-Wrap="false" HeaderStyle-Wrap="false"></asp:BoundField>
<asp:TemplateField HeaderText="gvSchedulesStatus" ItemStyle-Wrap="false">
<ItemTemplate>
<asp:ImageButton ID="cmdStart" runat="server" ToolTip="Start" SkinID="StartMedium" Visible='<%# !IsScheduleActive((int)Eval("StatusID")) %>'
CommandName="start" CommandArgument='<%# Eval("ScheduleID") %>' />
<asp:ImageButton ID="cmdStop" runat="server" ToolTip="Stop" SkinID="StopMedium" Visible='<%# IsScheduleActive((int)Eval("StatusID")) %>'
CommandName="stop" CommandArgument='<%# Eval("ScheduleID") %>' />
<%# GetScheduleStatus((int)Eval("StatusID")) %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="gvSchedulesResult" HeaderStyle-Wrap="false" ItemStyle-Width="150px">
<ItemTemplate>
<%# GetAuditLogRecordSeverityName((int)Eval("LastResult"))%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="PackageName" HeaderText="gvSchedulesSpace">
<ItemStyle Wrap="False"></ItemStyle>
<ItemTemplate>
<asp:hyperlink id="lnkSpace" runat="server"
NavigateUrl='<%# GetSpaceHomePageUrl((int)Eval("PackageID")) %>'>
<%# Eval("PackageName") %>
</asp:hyperlink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="Username" HeaderText="gvSchedulesUser">
<ItemStyle Wrap="False"></ItemStyle>
<ItemTemplate>
<asp:hyperlink id="lnkUser" runat="server"
NavigateUrl='<%# GetUserHomePageUrl((int)Eval("UserID")) %>'>
<%# Eval("Username") %>
</asp:hyperlink>
</ItemTemplate>
<HeaderStyle Wrap="False" />
</asp:TemplateField>
</Columns>
</asp:GridView>
<div class="GridFooter">
<asp:Label ID="lblScheduledTasks" runat="server" meta:resourcekey="lblScheduledTasks" Text="Scheduled Tasks:"></asp:Label>
<uc4:Quota ID="quotaTasks" runat="server" QuotaName="OS.ScheduledTasks" />
</div>
<asp:ObjectDataSource ID="odsSchedules" runat="server" EnablePaging="True" SelectCountMethod="GetSchedulesPagedCount"
SelectMethod="GetSchedulesPaged" SortParameterName="sortColumn" TypeName="WebsitePanel.Portal.SchedulesHelper" OnSelected="odsSchedules_Selected">
<SelectParameters>
<asp:ControlParameter ControlID="chkRecursive" Name="recursive" PropertyName="Checked" />
<asp:ControlParameter ControlID="searchBox" Name="filterColumn" PropertyName="FilterColumn" />
<asp:ControlParameter ControlID="searchBox" Name="filterValue" PropertyName="FilterValue" />
</SelectParameters>
</asp:ObjectDataSource>
还有我的服务器端代码
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("zarejdame stranitsata <br />");
//BindServerTime();
// set display preferences
gvSchedules.PageSize = UsersHelper.GetDisplayItemsPerPage();
if (!IsPostBack)
{
chkRecursive.Visible = (PanelSecurity.EffectiveUser.Role != UserRole.User);
// toggle controls
//btnAddItem.Enabled = PackagesHelper.CheckGroupQuotaEnabled(
// PanelSecurity.PackageId, ResourceGroups.Statistics, Quotas.STATS_SITES);
searchBox.AddCriteria("ScheduleName", GetLocalizedString("Text.ScheduleName"));
searchBox.AddCriteria("Username", GetLocalizedString("Text.Username"));
searchBox.AddCriteria("FullName", GetLocalizedString("Text.FullName"));
searchBox.AddCriteria("Email", GetLocalizedString("Text.Email"));
bool isUser = PanelSecurity.SelectedUser.Role == UserRole.User;
gvSchedules.Columns[gvSchedules.Columns.Count - 1].Visible = !isUser;
gvSchedules.Columns[gvSchedules.Columns.Count - 2].Visible = !isUser;
Response.Write("page load za parvi pat<br />");
}
Response.Write("krai na page load<br />");
}
protected void odsSchedules_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
if (e.Exception != null)
{
ProcessException(e.Exception);
e.ExceptionHandled = true;
}
}
protected void gvSchedules_RowCommand(object sender, GridViewCommandEventArgs e)
{
Response.Write("1111");
Response.Write("aaaa " + e.CommandArgument + "<br />");
int scheduleId = Utils.ParseInt(e.CommandArgument.ToString(), 0);
if (e.CommandName == "start")
{
Response.Write("start schedule<br />");
try
{
int result = ES.Services.Scheduler.StartSchedule(scheduleId);
if (result < 0)
{
ShowResultMessage(result);
return;
}
}
catch (Exception ex)
{
ShowErrorMessage("SCHEDULE_START_TASK", ex);
return;
}
}
else if (e.CommandName == "stop")
{
try
{
int result = ES.Services.Scheduler.StopSchedule(scheduleId);
if (result < 0)
{
ShowResultMessage(result);
return;
}
}
catch (Exception ex)
{
ShowErrorMessage("SCHEDULE_STOP_TASK", ex);
return;
}
}
// rebind grid
gvSchedules.DataBind();
}
受保护的无效页面加载(对象发送方,事件参数e)
{
回复。填写(“zarejdame stranitsata
”;
//BindServerTime();
//设置显示首选项
gvSchedules.PageSize=UsersHelper.GetDisplayItemsPerPage();
如果(!IsPostBack)
{
chkRecursive.Visible=(PanelSecurity.EffectiveUser.Role!=UserRole.User);
//切换控件
//btnAddItem.Enabled=PackageHelper.CheckGroupQuoteEnabled(
//PanelSecurity.PackageId,ResourceGroups.Statistics,quota.STATS_SITES);
searchBox.AddCriteria(“ScheduleName”,GetLocalizedString(“Text.ScheduleName”));
searchBox.AddCriteria(“用户名”,GetLocalizedString(“Text.Username”);
searchBox.AddCriteria(“全名”,GetLocalizedString(“Text.FullName”);
searchBox.AddCriteria(“Email”,GetLocalizedString(“Text.Email”);
bool isUser=PanelSecurity.SelectedUser.Role==UserRole.User;
gvSchedules.Columns[gvSchedules.Columns.Count-1]。可见=!isUser;
gvSchedules.Columns[gvSchedules.Columns.Count-2]。可见=!isUser;
响应。写入(“页面加载za parvi pat
”;
}
响应。写入(“krai na页面加载
”;
}
已选择受保护的无效ODS计划(对象发送方、对象数据源StatuseEventArgs e)
{
如果(例如异常!=null)
{
过程异常(例如异常);
e、 ExceptionHandled=true;
}
}
受保护的void gvu row命令(对象发送方,GridViewCommandEventArgs e)
{
回复。填写(“1111”);
响应。写入(“aaaa”+e.CommandArgument+”
);
int scheduleId=Utils.ParseInt(例如,CommandArgument.ToString(),0);
如果(如CommandName==“开始”)
{
响应。写入(“开始计划
”;
尝试
{
int result=ES.Services.Scheduler.StartSchedule(scheduleId);
如果(结果<0)
{
ShowResultMessage(结果);
返回;
}
}
捕获(例外情况除外)
{
发送消息(“计划启动任务”,例如);
返回;
}
}
否则如果(e.CommandName==“停止”)
{
尝试
{
int result=ES.Services.Scheduler.StopSchedule(scheduleId);
如果(结果<0)
{
ShowResultMessage(结果);
返回;
}
}
捕获(例外情况除外)
{
发送消息(“计划停止任务”,例如);
返回;
}
}
//重新绑定网格
gvSchedules.DataBind();
}
我的页面负载中没有任何内容。通过调试,我可以看到输入为最后一行触发回发,并到达pageload,但从未到达rowCommand代码块。回复。写(“1111”);从来没有出现过。任何想法都会有帮助。您可以在gridview上添加
OnRowCommand=“gvSchedules\u RowCommand”
我也遇到了类似的问题,我知道了原因。你的问题可能已经解决了,但我写在这里,因为它可能会帮助其他陷入同样情况的人
onrowcommand事件将自身与网格的rowindex关联,这有助于跟踪单击的行
如果在绑定数据后将任何标题或行添加到网格中,则行索引将被更改,并且rowcommand将仅对找到索引的行执行
在我的例子中,我添加了一个标题,而rowindex被偏移了一个。这就是它在最后一行上找不到rowcommand控件的原因。也许这也是你的问题所在
若要解决此问题,请在onrowcreated事件期间添加标题,这不会弄乱行索引。您是在标记或代码中将GridView连接到GVU RowCommand事件?您如何绑定数据?我使用ObjectDataSource填充网格,在标记中是我有RowCommand事件。。就像我说的其他行正在使用there row命令一样,只有最后一行不行。您可以发布其余的标记,包括ObjectDataSource和GridView定义吗?我已经添加了它,否则其他行row命令将无法工作。