我创建了一个gridview,其中有一个列有一些图像按钮来执行某些操作。与此同时,我还在标题点击上创建了排序事件。
当我点击"任务标题" Header,命令转到Grid View的RowCommand事件,我在其中检测到一个图像按钮并根据其CommandName执行操作。
但问题是我想对列进行排序,并且命令被定向到无法找到图像按钮的rowCommand。
我该如何解决这个问题?
aspx代码是:
<asp:GridView ID="TableTask" runat="server" BackColor="White" BorderColor="#CCCCCC"
BorderStyle="None" BorderWidth="1px" CellPadding="3" AutoGenerateColumns="False"
ViewStateMode="Enabled" Width="300px" Style="margin-left: 50px; margin-top: 50px;
margin-bottom: 50px;" RowStyle-HorizontalAlign="Center" OnRowCommand="TableTask_RowCommand"
OnRowCreated="TableTask_RowCreated">
<Columns>
<asp:TemplateField HeaderText="Task Titl`enter code here`e" SortExpression="Task_Title">
<ItemTemplate>
<asp:Label ID="lblTaskName" Text='<%#BIND("Task_Title") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText=" ">
<ItemTemplate>
<asp:ImageButton ID="btnView" runat="server" CommandName="View" ImageUrl="~/Images/ViewIcon.png"
ToolTip="View" />
<asp:ImageButton ID="btnEdit" runat="server" CommandName="Change" ImageUrl="~/Images/EditIcon.png"
ToolTip="Edit" />
<asp:ImageButton ID="btnDelete" CommandArgument='<%# Eval("Task_ID") %>' runat="server"
CommandName="Remove" ImageUrl="~/Images/DeleteIcon.png" ToolTip="Delete" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="White" ForeColor="#000066" />
<HeaderStyle BackColor="Gray" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Center" />
<RowStyle ForeColor="#000066" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#007DBB" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#00547E" />
</asp:GridView>
和RowCommand方法背后的代码定义如下:
protected void TableTask_RowCommand(object sender, GridViewCommandEventArgs e)
{
GridViewRow gvr = (GridViewRow)((ImageButton)e.CommandSource).NamingContainer;
int rowIndex = gvr.RowIndex;
GridViewRow gv = TableTask.Rows[rowIndex];
Label task_title = (Label)gv.FindControl("lblTaskName");
if (e.CommandName == "View")
{
// My code
}
if (e.CommandName == "Change")
{
// My code
}
if (e.CommandName == "Remove")
{
// My code
}
}
当我们创建GridViewRow对象&#39; gvr&#39;时,它会出现异常。
异常是:无法转换类型为&#39; System.Web.UI.WebControls.GridView&#39;的对象输入&#39; System.Web.UI.WebControls.ImageButton&#39;。
嘿伙计!!你没有得到我...... 我说我应该怎么做才能在点击HeaderText时不要将命令转到RowCommand事件。
答案 0 :(得分:1)
处理Gridview的排序事件,将允许排序属性设置为True,并将以下代码添加到 .cs文件:
public SortDirection dir
{
get {
if (ViewState["dirstate"] == null)
{
ViewState["dirstate"] = SortDirection.Ascending;
}
return (SortDirection)ViewState["dirstate"];
}
set {
ViewState["dirstate"] = value;
}
}
protected void grdemp_Sorting(object sender, GridViewSortEventArgs e)
{
BindGrid();
string Sortdir = string.Empty;
if (dir == SortDirection.Ascending)
{
dir = SortDirection.Descending;
Sortdir = "DESC";
}
else
{
dir = SortDirection.Ascending;
Sortdir = "ASC";
}
DataView dv = new DataView(dt);
dv.Sort = e.SortExpression + " " + Sortdir;
grdemp.DataSource = dv;
grdemp.DataBind();
}
答案 1 :(得分:-1)
在RowCommand事件中,您可以尝试以下代码:
if(e.CommandName=="View")
{
int id=int.parse(e.CommandArgument.ToString());
}
相同的代码写入另外两个图像按钮
感谢......