Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我怎样才能知道中继器中的哪个按钮被按下了?_C#_Asp.net_Events_Button_Repeater - Fatal编程技术网

C# 我怎样才能知道中继器中的哪个按钮被按下了?

C# 我怎样才能知道中继器中的哪个按钮被按下了?,c#,asp.net,events,button,repeater,C#,Asp.net,Events,Button,Repeater,我在.aspx文件中有以下标记: <asp:Repeater ID="ListOfAssignments" runat="server" OnItemDataBound="ListOfAssignments_ItemDataBound"> <ItemTemplate> <asp:Label ID="AssignmentID" runat="server" Text="Label"></asp:Label>

我在.aspx文件中有以下标记:

<asp:Repeater ID="ListOfAssignments" runat="server" OnItemDataBound="ListOfAssignments_ItemDataBound">
    <ItemTemplate>

        <asp:Label ID="AssignmentID" runat="server" Text="Label"></asp:Label>
        <br />
        <asp:Label ID="PathToFile" runat="server" Text="Label"></asp:Label>
        <br />
        <asp:Button ID="RemoveAssignment" runat="server" Text="Remove" OnClick="RemoveAssignment_Click"/>

    </ItemTemplate>
</asp:Repeater>
我希望能够知道与单击的按钮相邻的标签文本。我该怎么做?

嗯,我知道c#和wp,但你应该尝试设置一个布尔值,并使用以下逻辑:如果为假,重复将继续,如果为真,将退出重复。试试这个:

bool exit;


void Button_Click(eventargs stuffy here)
{
exit = true,
}

void Repeat()
{
    if (exit == false)
    {
    Repeat();
    //Your code here
    }
}

您可以向按钮标记添加CommandName和CommandArgument属性,并将它们用作提示。然后在偶数处理程序中,您可以执行e.CommandName==“xxx”或e.CommandArgument==“xxx”。还可以使用CommandArgument传递实际字符串。您只需像绑定标签、文本等一样绑定数据:

<asp:Button ID="RemoveAssignment" runat="server" CommandArgument='<%#Eval("Label1")+","+ Eval("Label2")%>' Text="Remove" OnClick="RemoveAssignment_Click"/>

这应该能让你走了。

你要找的是:

这允许您在网页上创建多个按钮控件,并 以编程方式确定单击哪个按钮控件

因此,在
ListOfAssignments\u ItemDataBound
中,您可以将CommandArgument分配给按钮,其中
CommandArgument
是要删除的文章的ID:

protected void ListOfAssignments_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Button delButton = e.Item.FindControl("RemoveAssignment") as Button;
        delButton.CommandArgument = //set to the value of AssignmentID
        //rest of your code
    }
}
现在,您的按钮应该显示使用新的OnCommand:

<asp:Button ID="RemoveAssignment" OnCommand="RemoveAssignment" runat="server" Text="Remove" />

有了这个提示,您将知道在代码背后要读取哪些标签对象。@LincolnBergeson一些唯一的标识符,如AssignmentID。它如何计算AssignmentID?我不明白。@LincolnBergeson给我一分钟,我将发布一个示例,您将在哪里发布它?如果exit为false,您的Repeat()方法将使您进入无限循环。嗯,是的。。。您是对的:)您也可以通过添加if(framyint==3){//dostuff}else{framyint++}来跳过帧。为什么这一行:“if(e.Item.ItemType==ListItemType.Item | | e.Item.ItemType==ListItemType.AlternatingItem)”是必需的?@LincolnBergeson在您的示例中,这是不必要的。但是如果删除它,然后稍后添加
HeaderTemplate
FooterTemplate
,则
ItemDataBound
事件将失败,因为
e.Item.FindControl(“RemoveAssignment”)as按钮
不起作用,因为该按钮在页眉/页脚中不存在。。。所以一直这样做是一种很好的做法。在尝试查找控件之前,它只需确保它位于
AlternatingItemTemplate
ItemTemplate
中。
protected void ListOfAssignments_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Button delButton = e.Item.FindControl("RemoveAssignment") as Button;
        delButton.CommandArgument = //set to the value of AssignmentID
        //rest of your code
    }
}
<asp:Button ID="RemoveAssignment" OnCommand="RemoveAssignment" runat="server" Text="Remove" />
protected void RemoveAssignment(object sender, CommandEventArgs e)
{
    int articleIDToDelete = 0;
    if (Int32.TryParse((string)e.CommandArgument, out articleIDToDelete))
    {
        //delete the article with an ID = articleIDToDelete
    }
}