ListView通过调用Eval()动态添加带有CommandName,Visible,CommandArgument的图像按钮

时间:2016-03-27 07:22:23

标签: c# asp.net

附加欲望输出(记录)) 现在我可以添加多个链接到记录列,但不能添加多个图像按钮与命令名称和命令参数 enter image description here 我试图通过从后面的代码调用GetRecordLinks(Eval(“Records”))`来动态创建图像按钮,下面是我的代码

<asp:ListView ID="Student" runat="server" OnItemCommand="Student_ItemCommand" OnItemDeleting="Student_ItemDeleting" OnItemDataBound="Student_OnItemDataBound">
        <LayoutTemplate>
            <table class="DataGrid">
                <tr class="HeaderRow">                                               
                    <td style="width: 150px;">Name</td>
                    <td style="width: 200px;">Class(s)</td>
                    <td style="width: 150px;">Sex</td>
                    <td style="width: 200px;">Recordss</td>
                     <td style="width: 150px;">Status</td>
                    <td style="width: 30px; text-align: center;">Activate/Delete</td>                                                
                </tr>
                <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
            </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr>                    
                <td>
                    <b><%# Eval("StudentLastName") %>, <%# Eval("StudentFirstName") %> <%# Eval("StudentMiddleName") %></b>                        
                </td>
                <td>                        
                    <%# JoinStringList(Eval("class")) %>
                </td>
                <td> <%# Eval("sex") %></td>
                <td>
                    <%# GetRecordLinks(Eval("Records")) %>                        
                </td>                  
                <td>
                    <%# Eval("StatusID").ToString()=="0"?"Inactive":"Active" %>
                </td>
                <td style="text-align: center;">                        

                   <asp:ImageButton ImageUrl="img/Refresh.png" ID="StudentActive"  runat="server" CommandName="Active" Visible='<%#Eval("StatusID").ToString()=="0"?true:false%>' CommandArgument='<%# Eval("StudentGUID") %>' />                                                                
                    <asp:ImageButton ImageUrl="img/delete.png" ID="StudentDelete" runat="server" CommandName="Delete" Visible='<%#Eval("StatusID").ToString()=="0"?false:true%>' CommandArgument='<%# Eval("StudentGUID") %>' />                                                
                </td>
            </tr>
        </ItemTemplate>
    </asp:ListView>

GetRecordLinks方法

我想为每个学生记录添加带有CommandNameVisibleCommandArgument的asp:ImageButton。 如果学生A在一个单元格中每5条记录有5条记录,则应该有5个带有iteamcommand的图像按钮,以便我可以根据使用意愿删除或激活记录。

public string GetRecordLinks(object obj)
    {
        if (obj != null)
        {
            List<AppointmentDoc> docs = (List<AppointmentDoc>)obj;
            StringBuilder sb = new StringBuilder();                                              
            foreach (AppointmentDoc rec in docs)
            {                    
                sb.Append("<a target='_blank' href=\"result.ashx?uuid=" + rec.UUID.ToString() + "\">" + rec.Name.Replace("student", "").Trim() + " (" + rec.SignedBy + ")" + (rec.staffSigned ? "*" : "") + "</a><br/>");
            }
            return sb.ToString();
        }
        return "";
 }

希望了解我的问题 如果有任何疑问,请告诉我

感谢

1 个答案:

答案 0 :(得分:0)

您可以使用PlaceHolder并将ImageButtons添加到其中。首先,替换:

<td>
    <%# GetRecordLinks(Eval("Records")) %>                        
</td>

使用:

<td>
    <asp:PlaceHolder ID="phRecords" runat="server" />
</td>

然后在代码隐藏中:

void Student_OnItemDataBound(object sender, ListViewItemEventArgs e)
{
    ...
    PlaceHolder phRecords = e.Item.FindControl("phRecords") as PlaceHolder;
    ImageButton imgButton = new ImageButton();
    // Set the ImageButton properties here
    ph.Controls.Add(imgButton);
}

那会添加一个按钮。您可以将ImageButton创建代码放在循环中,以便在同一个单元格中添加其中的几个。

您还必须在每次回发时重新创建这些ImageButtons,因此您可能需要在Page_Load方法中绑定数据。