- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基于 DropDownList 的值动态创建的 GirdView。我使用 ITemplate 接口(interface)生成字段:
public class CreateItemTemplateOrder : ITemplate
{
ImageButton imgbtn_up;
ImageButton imgbtn_down;
string s_imgbtn_up_name;
string s_imgbtn_up_ImageUrl;
string s_imgbtn_up_CommandName;
string s_imgbtn_up_CommandArgument;
public CreateItemTemplateOrder(string imgbtn_up_name, string imgbtn_up_ImageUrl, string imgbtn_up_CommandName, string imgbtn_up_CommandArgument)
{
this.s_imgbtn_up_name = imgbtn_up_name;
this.s_imgbtn_up_ImageUrl = imgbtn_up_ImageUrl;
this.s_imgbtn_up_CommandName = imgbtn_up_CommandName;
this.s_imgbtn_up_CommandArgument = imgbtn_up_CommandArgument;
}
public void InstantiateIn(Control objContainer)
{
imgbtn_up = new ImageButton();
imgbtn_up.DataBinding += new EventHandler(imgbtn_up_DataBinding);
objContainer.Controls.Add(imgbtn_up);
}
private void imgbtn_up_DataBinding(object sender, EventArgs e)
{
ImageButton imgbtn_up = (ImageButton)sender;
imgbtn_up.ID = s_imgbtn_up_name;
imgbtn_up.ImageUrl = s_imgbtn_up_ImageUrl;
imgbtn_up.CommandName = s_imgbtn_up_CommandName;
imgbtn_up.CommandArgument = s_imgbtn_up_CommandArgument;
imgbtn_up.CausesValidation = false;
}
}
现在我想从这个动态生成的列中触发 RowCommand,命令参数和命令名称绑定(bind)到这个 ImageButton
实现此功能的代码是:
Protected void inizializza_gw_tipi(){
TemplateField order_col = new TemplateField;
order_col.ItemTemplate = new CreateItemTemplateOrdine("imgbtn_up", "~/imgs/Up.gif", "minus", "order");
order_col.HeaderText = "order";
order_col.SortExpression = "order";
gw_tipi.Columns.Add(order_col);
}
所有这些代码都可以正常工作,但在单击 ImageButton 时不会从 GridView 触发 RowCommand
编辑:我在 DropDownList 的 SelectedIndexChanged 事件中调用该过程 ddl_tipi_SelectedIndexChanged(对象发送者,System.EventArgs e) { inizializza_gw_tipi(); gw_tipi.DataBind();
Protected Sub inizializza_gw_tipi()
Using cn As New SqlConnection(shared_foos.connectionString)
Using cmd As New SqlCommand("SELECT nome_tabella, nome_campo_id, nome_campo_nome, nome_campo_descrizione, has_order FROM maschere_tipi WHERE id = @id", cn)
cmd.Parameters.AddWithValue("id", IIf(Session("sel_val") Is Nothing, "", Session("sel_val")))
cn.Open()
Dim rdr As SqlDataReader = cmd.ExecuteReader
rdr.Read()
If rdr.HasRows Then
Dim b_crea_controllo As Boolean = True
'controllo se mettere o no la colonna ordine
If rdr("has_order") = True Then
'controllo che la colonna non sia già stata inserita,
'se è già stata inserita la rimuovo e la ricreo
For i As Integer = 0 To gw_tipi.Columns.Count - 1
If gw_tipi.Columns(i).HeaderText = "ordine" Then
'gw_tipi.Columns.Remove(gw_tipi.Columns(i))
b_crea_controllo = False
End If
Next
If b_crea_controllo = True Then
Dim ordine_col As New TemplateField()
ordine_col.ItemTemplate = New CreateItemTemplateOrdine("lbl_ordine", "ordine", "imgbtn_up", "~/imgs/Up.gif", "meno", "ordine", "imgbtn_down", "~/imgs/Down.gif", "piu", "ordine", AddressOf ImageCommand)
ordine_col.HeaderText = "ordine"
ordine_col.SortExpression = rdr("nome_campo_nome")
gw_tipi.Columns.Add(ordine_col)
End If
End If
b_crea_controllo = True
For i As Integer = 0 To gw_tipi.Columns.Count - 1
If gw_tipi.Columns(i).HeaderText = rdr("nome_campo_nome") Then
b_crea_controllo = False
End If
Next
If b_crea_controllo = True Then
Dim nome_col As New TemplateField()
nome_col.ItemTemplate = New CreateItemTemplateLabel("lbl_nome", rdr("nome_campo_nome"))
nome_col.HeaderText = rdr("nome_campo_nome")
nome_col.SortExpression = rdr("nome_campo_nome")
gw_tipi.Columns.Add(nome_col)
End If
b_crea_controllo = True
For i As Integer = 0 To gw_tipi.Columns.Count - 1
If gw_tipi.Columns(i).HeaderText = rdr("nome_campo_descrizione") Then
b_crea_controllo = False
End If
Next
If b_crea_controllo = True Then
Dim descrizione_col As New TemplateField()
descrizione_col.ItemTemplate = New CreateItemTemplateLabel("lbl_descrizione", rdr("nome_campo_descrizione"))
descrizione_col.HeaderText = rdr("nome_campo_descrizione")
descrizione_col.SortExpression = rdr("nome_campo_descrizione")
gw_tipi.Columns.Add(descrizione_col)
End If
Dim str_order_by As String = " ORDER BY "
Dim str_ordine As String = ""
If rdr("has_order") = True Then
str_ordine = ", ordine "
str_order_by &= "ordine"
Else
str_order_by &= rdr("nome_campo_nome")
End If
Dim sqlds_tipi As New SqlDataSource(shared_foos.connectionString, "SELECT " & rdr("nome_campo_id") & ", " & rdr("nome_campo_nome") & ", " & rdr("nome_campo_descrizione") & str_ordine & " FROM " & rdr("nome_tabella") & str_order_by)
gw_tipi.DataSource = sqlds_tipi
End If
End Using
End Using
End Sub
最佳答案
我按原样使用了您的代码并进行了测试。此代码没有错误。行命令也被正确触发。我认为问题出在您创建的动态 gridview 的事件绑定(bind)上。
要触发行命令,必须在每次回发时创建 GridView 。并且事件应该被绑定(bind)。
您提供的代码不是我需要的。它没有 GridView 的初始化。
以下应该会给您一些见解。
GridView GV = new GridView(); //Make sure to create the grid view on every postback and populate it. Alternatively (i dont know if its a good practice.) you can store a reference of gridview in session.
GV.RowCommand += new GridViewCommandEventHandler(GV_RowCommand); //bind the row command event. this should solve the problem.
服务器不跟踪动态创建的控件。因此,当回发发生时,gridview 控件不存在。因此不会触发任何事件。
关于c# - 从在 ITemplate 中动态创建的 ImageButton 触发 RowCommand 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9716749/
有没有办法通过代码填充ITemplate?假设我有一个 UpdatePanel: UpdatePanel upnl = new UpdatePanel(); // What should be don
为了更轻松地创建某些表单,我们使用用户控件内的修改后的 Formview 控件。此用户控件用于网格和 FormView,您可以在网格中选择一个项目,并且 FormView 以模式呈现以供查看/编辑:
当我们想在我们的用户控件中定义一个模板时,我们在我们的用户控件中声明一个这样的字段 public ITemplate MyTemplate { get; set; } 以便用户定义的模板内容将在 My
我有一个使用简单 ITemplate 的自定义 UserControl: 模板使用两个简单的属性呈现: public class Expander
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
这是我的自定义服务器控件的示例代码: [Designer(typeof(ContainerControlDesigner))] [ToolboxData("")] public class BlocA
我有一种情况,我需要使用数据网格并在 PageInit 中动态添加列,因为网格有一些必须处理的条件请求。我很容易使用 BoundColumns 和 ButtonColumns,这些都很容易。问题在于通
我们有几个 ASP.Net 数据 View 列模板,它们根据用户选择的列动态添加到数据 View 中。 这些模板化单元需要处理自定义数据绑定(bind): public class CustomCol
将控件添加到 UpdatePanel 后,仍然可以从包含页面的代码访问它。这是如何实现的?自定义控件开发人员可以这样做吗? 换句话说,如果我使用 ITemplate 接口(interface)开发
我有一个基于 DropDownList 的值动态创建的 GirdView。我使用 ITemplate 接口(interface)生成字段: public class CreateItemTemplat
我正在尝试新的 Azure 移动应用程序。在 Azure 中创建实例,然后下载 Visual Studio 包。通过 Nuget 更新了所有组件。现在,当我运行它时,出现以下错误: An error
我是一名优秀的程序员,十分优秀!