【问题标题】:How I use the ItemCommand Event for my ListView in my ASP.NET Application如何在我的 ASP.NET 应用程序中为我的 ListView 使用 ItemCommand 事件
【发布时间】:2012-07-21 14:46:32
【问题描述】:

我有一个带有 ListView 的 ASP.NET 应用程序。在我的 ListView 的每一行中,我都有一个 LinkBut​​ton,可以打开一个新的网络表单“Benutzer.aspx”。我的问题是我没有得到这一行的索引。我使用了 ItemCommand 事件,但它不起作用:(

这是我的代码:

ASPX:

...

        <ItemTemplate>

            <tr runat="server"> 

                <td align="left" ><asp:Label ID="Label1" Text='<%# Eval("Benutzer") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label2" Text='<%# Eval("eMail") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label3" Text='<%# Eval("Vorname") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label4" Text='<%# Eval("Nachname") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label5" Text='<%# Eval("Telefon") %>' runat="server" /></td>

             <td align="left"><asp:LinkButton runat="server" Text="Anzeigen" CommandName="Anzeigen" OnCommand="ListView1_ItemCommand" CommandArgument="myArguments"></asp:LinkButton></td>

            </tr>

        </ItemTemplate>

...

cs 文件:

...

protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "Anzeigen")
            {
                Label lbText = (Label)e.Item.FindControl("Label2");

               string email = lbText.Text;

               Session["email"] = email;

               Response.Redirect("Benutzer.aspx");

            }
        }

...

怎么了:(

塔拉索夫

【问题讨论】:

  • 究竟是什么问题?我的猜测是你找不到标签是这样的吗?

标签: c# asp.net listview active-directory itemcommand


【解决方案1】:

试试这个:

首先你需要有按钮的索引。所以在 html 代码中在按钮的 CommandArgument 中添加这个来获取索引:

CommandArgument='<%# Container.DataItemIndex %>'

然后在代码隐藏中:

if (e.CommandName == "Anzeigen")
{
      Label lbText = ListView1.Item[e.CommandArgument].FindControl("Label2");
      string email = lbText.Text;           

           Session["email"] = email;           

           Response.Redirect("Benutzer.aspx");           
}

希望能帮到你

【讨论】:

  • 通过 Container.DataItemIndex 获取 Int DataTyp? Label lbText = ListView1.Item[(int)e.CommandArgument].FindControl("Label2"); 出现错误Errortext:指定的强制转换无效。 ...但我喜欢你的想法...希望这是一个小错误;(
【解决方案2】:

您找不到该控件,因为它包含在另一个服务器控件的子控件集合中:

<tr runat="server">

你需要尝试递归查找控件:

看看

Better way to find control in ASP.NET

或者你可以使用这个扩展方法:

public static class ControlExtensions
{
    public static Control FindControlRecursively(this Control control, string targetControlID)
    {
        if (control == null)
        {
            return null;
        }

        var ctrl = control.FindControl(targetControlID);

        if (ctrl == null)
        {
            foreach (Control child in control.Controls)
            {
                ctrl = FindControlRecursively(child, targetControlID);

                if (ctrl != null)
                {
                    break;
                }
            }
        }

        return ctrl;
    }
}

用法:

var ctrl = e.Item.FindControlRecursively("your control ID");

【讨论】:

  • 这个类的命名空间需要什么?
  • 现在我已经通过 标签删除 runat="server" ......我的 但我无法启动方法:protected void Button1_Command(object sender, ListViewCommandEventArgs e) { if (e.CommandName == "Select" ) { var index = e.Item.FindControlRecursively("Label2");标签 lb = (Label)myListView.Items[selectedIndex].FindControl("Label2"); ... } }
【解决方案3】:

你提供的代码很好......“只需从你的 listview 属性中删除'CommandArgument',bcoz ..它已经有你正在寻找的数据索引。通过指定一个命令参数,你将覆盖默认参数. 所以只需删除命令参数,您的代码就可以正常工作...... :)

【讨论】:

    【解决方案4】:

    我是一个 VB 程序员检查这个方法可能会给你一些想法

    将列表与数据源绑定后,在 itemCommand 中执行此操作

    Dim <sometext> As Label = TryCast(e.Item.FindControl("Anzeigen"), Label)
    
        If e.CommandName = "Anzeigen" Then
         'do what ever you like 
         'also you can use <sometext> if you want to extract data from list
         'simply use <sometext>.<whatproperty>, you can also store it in sessions like the email you are using.
    
             Session("email") = email         
    
           Response.Redirect("Benutzer.aspx");  
        End If
    

    如果它可以帮助您解决问题,请告诉我。

    【讨论】:

      【解决方案5】:

      这是 HTML,然后构建 OnItemCommand

      <asp:ListView ID="lvFiles" runat="server"  DataKeyNames="FileName" OnItemCommand="lvFiles_ItemCommand">
        <ItemTemplate>
          <tr runat="server">
            <td style="width:80px">
              <asp:LinkButton runat="server" 
                              ID="SelectEmployeeButton" 
                              Text="Download File"   
                              CommandName='<%#Eval("FileName")%>'
                              CommandArgument='<%#Eval("FileName")%>' />
            </td> 
          </tr>
        </ItemTemplate>
      </asp:ListView>
      

      这是后面的代码...

      protected void lvFiles_ItemCommand(object sender, ListViewCommandEventArgs e)
      {
          string v = e.CommandArgument.ToString(); 
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-01
        • 1970-01-01
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多