- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 GridView,其中有两列可以进行排序。排序后,我想在列旁边显示一个图像,箭头向上或向下以进行 Asc 和 Desc 排序。
我不知道如何引用 ImageButton 对象,因此我可以根据其 Asc 和 Desc 将 ImageButton.ImageUrl 设置为实际图像。
这是我的 .aspx 代码:
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:LinkButton ID="Name_SortLnkBtn" runat="server" Text="Name:" ToolTip="Click to Sort Column" CommandName="Sort" CommandArgument="Name" CausesValidation="false" />
<asp:ImageButton ID="Name_SortImgBtn" runat="server" Visible="false" ToolTip="Click to Sort Column" CommandName="Sort" CommandArgument="Name" CausesValidation="false" />
</HeaderTemplate>
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "~/TestResults/Diabetes.aspx?ID="+Eval("ID") %>'><%#Eval("Name")%></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>
<asp:LinkButton ID="HouseName_SortLnkBtn" runat="server" Text="House Name:" ToolTip="Click to Sort Column" CommandName="Sort" CommandArgument="House" CausesValidation="false" />
<asp:ImageButton ID="HouseName_SortImgBtn" runat="server" Visible="false" ToolTip="Click to Sort Column" CommandName="Sort" CommandArgument="House" CausesValidation="false" />
</HeaderTemplate>
<ItemTemplate><%#Eval("House")%></ItemTemplate>
</asp:TemplateField>
</Columns>
帮助将不胜感激。
更新的 .aspx.cs 文件:
public partial class Home : System.Web.UI.Page
{
protected _code.SearchSelection _SearchSelection = new _code.SearchSelection();
protected _code.Utils _utils = new _code.Utils();
protected ImageButton sortImage = new ImageButton();
protected void Page_Load(object sender, EventArgs e) {
//if (!IsPostBack) {
Master.FindControl("Home").ID = "active";
GridView1_DataBind();
//Guid ID = new Guid(_SearchSelection.getUserID().Tables[0].Rows[0]["u_ID"].ToString());
//}
}
protected void GridView1_DataBind() {
string selection = string.Empty;
TreeView treeMain = (TreeView)tree.FindControl("treeMain");
if (treeMain.SelectedNode != null)
selection = treeMain.SelectedNode.Text;
else
selection = Session["Selection"].ToString();
DataSet mainData = _utils.getStoreProcedure(new SqlParameter[] { new SqlParameter("@Selection", selection) }, "sp_getTenantsWithDiabetes", ConfigurationManager.ConnectionStrings["TIPS4"].ConnectionString);
Session["MainData"] = mainData.Tables[0];
GridView1.DataSource = mainData.Tables[0];
GridView1.DataBind();
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) {
//Retrieve the table from the session object.
DataTable dt = Session["MainData"] as DataTable;
ImageButton imageButton = new ImageButton();
if (dt != null) {
//Sort the data.
dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
//imageButton.ImageUrl = "~/App_Themes/Sugar2006/Images/arrow_up.gif";
//imageButton.Visible = true;
this.GridView1.DataSource = Session["MainData"];
this.GridView1.DataBind();
}
}
private string GetSortDirection(string column) {
// By default, set the sort direction to ascending.
string sortDirection = "ASC";
// Retrieve the last column that was sorted.
string sortExpression = ViewState["SortExpression"] as string;
if (sortExpression != null) {
// Check if the same column is being sorted.
// Otherwise, the default value can be returned.
if (sortExpression == column) {
string lastDirection = ViewState["SortDirection"] as string;
if ((lastDirection != null) && (lastDirection == "ASC")) {
sortDirection = "DESC";
}
}
}
// Save new values in ViewState.
ViewState["SortDirection"] = sortDirection;
ViewState["SortExpression"] = column;
return sortDirection;
}
protected void gridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.Header) {
var imageButton = (ImageButton)e.Row.FindControl("Name_SortImgBtn");
sortImage = imageButton;
//imageButton.ImageUrl = "~/App_Themes/Sugar2006/Images/arrow_up.gif";
//imageButton.Visible = true;
}
}
最佳答案
要获得对 HeaderTemplate
中定义的 ImageButton
的引用,您可以连接 RowDataBound GridView
的事件。在事件处理程序中,使用 RowType
属性检查该行是否为标题行,然后使用 FindControl
方法获取对该控件的引用。
protected void gridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.Header)
{
var imageButton = (ImageButton)e.Row.FindControl("Name_SortImgBtn");
imageButton.ImageUrl = "~/myimage.gif";
}
}
编辑
我认为您走在正确的轨道上。我将进行以下更改:
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
//Retrieve the table from the session object.
DataTable dt = Session["MainData"] as DataTable;
if (dt == null) return;
//Sort the data
dt.DefaultView.Sort = e.SortExpression + " " +
GetSortDirection(e.SortExpression);
this.GridView1.DataSource = dt;
this.GridView1.DataBind();
}
无需担心 Sorting
事件处理程序中的 ImageButton
。单击 header 中的 LinkButton
将导致回发,并且将调用 Sorting
事件处理程序。它将在触发 RowDataBound
事件之前运行(直到调用 GridView1.DataBind
方法时才会发生)。此外,GetSortDirection
方法会将排序表达式和排序顺序存储在 ViewState
中。稍后我们将在 RowDataBound
事件处理程序(如下所示)中需要这些值。
protected void gridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
//Determine sort column and sort order
var column = ViewState["SortExpression"] != null ?
ViewState["SortExpression"].ToString() : string.Empty;
var sortDirection = ViewState["SortDirection"] != null ?
ViewState["SortDirection"].ToString() : string.Empty;
//Find ImageButton based on sort column (return if not found)
var imageButtonID = string.Concat(column, "_SortImgBtn");
var imageButton = e.Row.FindControl(imageButtonID) as ImageButton;
if(imageButton == null) return;
//Determine sort image to display
imageButton.ImageUrl = string.Equals("asc", sortDirection.ToLower()) ?
"~/App_Themes/Sugar2006/Images/arrow_up.gif" :
"~/App_Themes/Sugar2006/Images/arrow_down.gif";
imageButton.Visible = true;
}
}
在此事件处理程序中,我们将检索存储在 ViewState
中的值,以确定将哪个 ImageButton
设置为 Visible
以及哪个图像 url根据排序方向使用。我假设您已经为 ImageButton
控件提供了列名的 ID
加上 "_SortImgBtn"
(如果您以这种方式进行操作您可以避免使用 switch 语句将列映射到控件名称)。只需确保 ImageButton
控件在首页中将 Visible
设置为 false
即可显示排序图像。
关于c# - 在 asp.net 中引用 ImageButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9267416/
我试图对 ASP.Net MVC 有一个高层次的理解,我开始意识到它看起来很像原始的 ASP 脚本。过去,我们将“模型”/业务逻辑代码组织到 VBScript 类或 VB COM 组件中。 当然,现在
我已经搜索了一段时间,但似乎找不到答案。 我想在我的旋转木马中显示一个计数器,左边是当前项目(工作),左边是项目总数。 我的代码:
. 最佳答案 Scott Gu 称这些为代码块。这就是我的看法。 http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax
我有一个使用 Visual Studio 2010/.net 4/VB 制作的网站。 我真的很喜欢我发现的 FAQ 系统的布局,因为它很简单,但它是经典的 asp。所以,显然,我不能包括我的母版页布局
好吧,对于你们许多人来说,这个问题可能有一个非常明显的答案,但它让我难住了。 我有一个 asp.net Web 表单,上面有两个控件(嗯,不止这两个,但我们将重点关注这些) - 第一个是 asp:dr
当我将 ASP.NET 复选框控件设置为 asp.net 更新面板的异步回发触发器时,EventName 属性是什么? 最佳答案 我相信它是 CheckedChanged。 关于asp.net - a
我有一个用经典 asp 编写的(巨大的)网站。现在我必须切换到 vb.net (razor)。有没有办法将这两个结合起来直到切换完成? 有没有办法让应用程序与经典的 asp 和 vb.net 一起工作
I am creating a products page, where the user selects an option in a radiobuttonlist for example, an
我最近将一个经典的 ASP 应用程序转换为 ASP.NET 3.5,但我觉得我的经典 ASP 版本要快一些(我不知道可能买家会后悔)。 所以你们能帮我解决这个问题吗,让我知道哪个更快,asp、asp.
从本周开始,我被要求开始学习如何使用 ASP 开发网站。我通过 XNA 对 C# 有一定的经验,所以这部分对我来说并不是什么麻烦。 我一直在关注Music Store Tutorial这需要我设置一个
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我想将一些表单变量发布到经典 ASP 页面中。我不想改变经典的 ASP 页面,因为需要完成大量的工作,以及消耗它们的页面数量。 经典的 ASP 页面需要将表单变量 Username 和 Userpas
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
在某种程度上,这可能是一个异端问题。我们有一个大型站点,其中许多页面仍在ASP中。通常,并没有真正动态的,而是包括(通过SSI或Server.Execute)定期重新生成的HTML块。看起来好像是一个
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我有一个遗留的 ASP 应用程序——在不久的某个时候——需要迁移到 ASP.Net 2.0(以与也在 2.0 中的其他应用程序兼容)。 对于这类事情是否有最佳实践,即作为第一步将当前 html、vbs
我目前在一家公司工作,该公司使用 ASP.NET Webforms 和旧 ASP 页面的组合进行 Web 开发。这对于他们当前的项目来说效果很好,但我想说服/建议他们切换到 ASP.NET MVC,因
我有一个经典的 asp 应用程序。我想将该页面的竞赛表格发布到 Asp.Net 表格。原因是我想在进入数据库之前使用我在 Asp.Net 页面中内置的大量逻辑进行验证,而我对 asp 不太了解。更不用
我知道在 ASP.NET MVC 中,您可以拥有移动 View 并执行类似 Index.mobile.cshtml 的操作。和 _Layout.mobile.cshtml并且服务器知道将这些 View
我需要从一些服务器端 c#.net 代码中调用经典 asp 页面上的 VBscript 函数 - 有谁知道一种干净的方法来做到这一点?在 .net 中重写函数不是一种选择。 我会再解释一下这个问题..
我是一名优秀的程序员,十分优秀!