- 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/
我使用类 java 来自定义圆形图像按钮。现在我想将它转换为 ImageButton。但是给我错误ClassCastException。我需要帮助 !如果你有决心请给我。谢谢。 我用 rootView
我设置了一些样式来处理不同的 API(一种用于 v21,另一种用于任何低于该版本的 API)。我想为我的 ImageButton 设计一种样式,但它似乎没有按我预期的方式工作。 v-21 的风格是
所以我设置了 4 个普通图像按钮,然后是第 5 个图像按钮,它是一个拖放按钮。我希望 4 个非拖放图像按钮保留在特定位置,无论拖放图像按钮发生什么情况。当我移动拖放图像按钮时,其他图像按钮也会移动并且
我在后面的代码中创建了一个 ImageButton。现在我需要当客户端按下 ImageButton 时,ImageButton 将执行特定功能。问题是它不执行此特定功能。 这是代码- var img
我知道如何在单击时更改 ImageButton 的 src,但是当时我还想更改另一个 ImageButton 的 src。我不知道如何访问未单击的 ImageButton。我知道是身份证 编辑:值得一
其实我有两个问题: (1) 是否可以将另一个图像放在已经设置了 ImageUrl 的 ImageButton 之上(无需更改 ImageUrl - 字面上只是将第二个图像添加到“顶部”)?甚至通过使用
这是一张可以帮助你理解我的问题的图片: 我想将 ImageButton 中显示的图像拉伸(stretch)到 ImageButton 的整个区域。可以看到,编号为1的图片只占ImageButton的9
找不到以下类: - ImageButton(更改为android.widget.ImageButton、修复构建路径、编辑 XML) 当我使用 android:src="@drawable/chang
我正在开发一个应用程序,在某些时候它会显示一些“学习表”。问题是,对于每个项目,它应该显示两个按钮,这些按钮应该重叠在卡片 View 上,但它只适用于普通按钮,而使用图像按钮则不会发生这种情况。
如果我使用带有选择器的 ImageButton 作为其背景,是否有我可以更改的状态来改变它的外观?现在我可以让它在按下时更改图像,但似乎没有“突出显示”或“选择”或类似状态让我随意切换它的外观。 这是
我刚刚开始使用我的第一个音板。基本上这就是我到目前为止所拥有的(除了我有 40 个声音)。有谁知道更好的方法来做到这一点?我必须去约会,但我今天晚些时候会回来回复。谢谢你,任何可以帮助的人。 ----
我的“删除按钮(图像按钮)”的单击事件有问题。我知道大家对此还有其他疑问,但我什么也不明白! 我没听懂没有答案!我做了所有其他问题中指定的所有内容!此页面中的其他事件使“重定向”到示例,效果很好! 我
这是我的问题的后续: Asp:Label is not shown when visible is set to true? 在上面的问题中,我有一些控件的可见性未设置为 false,因为它们不在 U
我正在尝试创建一个测试应用程序,当我按下 ImageButton 时,会出现一条日志消息。简单。 我希望 ImageButton View 能够与类一起使用。 我是这样做的:更新了正确的 builde
嘿,我正在尝试进行对话。但整个对话框没有显示,只有底部 3 个图像按钮显示:这里出了什么问题?当我单击对话框内的按钮时,即使我做了一个开关盒,也没有任何反应。 customtype_dialog.xm
我正在尝试动态声明一个 ImageButton。 我声明它并为其分配一个 ID 和图像,如下所示: ImageButton btn = new ImageButton(); btn.ImageUrl
在我的应用程序中,我可以使用此类缩放 ImageView `公共(public)类 resizeAvatar 扩展 View { private final Drawable sfondoAvatar
我已将我的按钮设置为按 Facebook、Instagram、Twitter 和 Reddit 的顺序从上到下排列,但它没有这样做,它只显示 Facebook 和 Reddit,我不知道为什么。我有我
我是 Android 新手 我需要动态移动 ImageButton,就像当我单击按钮时它需要重新定位到一个新位置。我正在使用 AbsoluteLayout。 最佳答案 永远不要使用 AbsoluteL
我无法让 ImageButton 显示在屏幕右侧。如果我将 ImageButton 放在内部 LinearLayout 上方,它将显示在左侧,但是当我将它放在内部 LinearLayout 下方时,它
我是一名优秀的程序员,十分优秀!