0

让我准确地解释我的问题。

我在网格视图中有一个按钮。我想要做的是在单击该按钮时显示一个模式弹出窗口。

因为,我无法将模态弹出扩展器放置在 gridview 内,所以我将其放置在 gridview 之外。因为我将它放在gridview 之外,所以gridview 按钮无法访问它。为此,我在 gridview 之外创建了一个虚拟按钮,并从 Gridview 按钮的单击事件中调用模式弹出窗口。

让我告诉你我的网格视图(它的 Telerik)

<telerik:RadGrid ID="GridView2" runat="server" AutoGenerateColumns="false" Width="400"
                    GridLines="None" >
            <MasterTableView >
                    <Columns>
                    <telerik:GridBoundColumn DataField="fname" HeaderText="First Name" />
                    <telerik:GridBoundColumn DataField="mname" HeaderText="Middle Name" />
                    <telerik:GridBoundColumn DataField="lname" HeaderText="Last Name" />
                    <telerik:GridTemplateColumn>
                    <ItemTemplate>
                    <asp:CheckBox ID="checkselect" runat="server" />
                    </ItemTemplate>
                    <HeaderTemplate>
                    <asp:Button ID="Button4" runat="server" Text="Remove"  CommandName="Split" OnClick="Button4_Click" />
                    </HeaderTemplate>
                    </telerik:GridTemplateColumn>
                    </Columns>
                    </MasterTableView >
             </telerik:RadGrid>
             </div>
             </td>
             </tr>
 </ItemTemplate>
 </telerik:GridTemplateColumn>
 </Columns>
 </MasterTableView>
 </telerik:RadGrid>

现在我的模态弹出窗口

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button5" runat="server" Text="Button" style="display:none"/>
<asp:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="Button5" CancelControlID="Button1" PopupControlID="Panel1">
 </asp:ModalPopupExtender>
   <asp:Panel ID="Panel1" runat="server" Height="65px" style="display:none" >
    <p>
    Thank You for Removing records
    </p>
    </asp:TextBox> <asp:Button ID="Button3" runat="server" Text="Submit"  />
    <asp:Button ID="Button1" runat="server" Text="Cancel" />
     </asp:Panel>
  </ContentTemplate>
  </asp:UpdatePanel>

问题是当我单击 gridview 按钮(Button4)时,它会抛出 Invalid Postback 错误。我认为那是因为我将 Modalpopup 放在更新面板和 gridview 外面。有人可以告诉我如何处理这个问题吗?我无法将 Gridview 放置在更新面板内,因为它正在停止导致模式弹出扩展器显示的按钮单击事件。

按钮点击事件:

 protected void Button4_Click(object sender, EventArgs e)
    {
    ModalPopupExtender1.Show();
    }
4

2 回答 2

2

更新:这是在单击按钮时显示确认消息和收集用户输入的方式。

然后从后面的代码中收集选中的复选框 Id。

请注意,您需要将 PrimaryKey/UniqueKey 分配给 RadGrid 的 DataKeyName。

在此处输入图像描述

<asp:ScriptManager runat="server" ID="ScriptManager"></asp:ScriptManager>
<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" 
    Width="400" GridLines="None" OnNeedDataSource="RadGrid1_NeedDataSource">
    <MasterTableView DataKeyNames="Id">
        <Columns>
          <telerik:GridBoundColumn DataField="FirstName" HeaderText="First Name" />
          <telerik:GridBoundColumn DataField="MiddelName" HeaderText="Middle Name" />
          <telerik:GridBoundColumn DataField="LastName" HeaderText="Last Name" />
          <telerik:GridTemplateColumn>
                <ItemTemplate>
                    <asp:CheckBox ID="SelectCheckBox" runat="server" />
                </ItemTemplate>
                <HeaderTemplate>
                    <asp:Button ID="Button4" runat="server" Text="Remove"
                        OnClientClick="return showWindow();" />
                </HeaderTemplate>
            </telerik:GridTemplateColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>
<telerik:RadWindow ID="RadWindow1" runat="server" Width="400" Height="200">
    <ContentTemplate>
        Enter a reason to delete:<br />
        <asp:TextBox runat="server" ID="ReasonTextBox" TextMode="MultiLine" Rows="5" 
            Width="350" /><br />
        <asp:Button runat="server" ID="DeleteButton" Text="Delete" 
            OnClick="DeleteButton_Click" />
    </ContentTemplate>
</telerik:RadWindow>
<script type="text/javascript">
    function showWindow() {
        var wnd = $find("<%=RadWindow1.ClientID %>");
        wnd.show();
        return false;
    }
</script>

public class User
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string MiddelName { get; set; }
    public string LastName { get; set; }
}

protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    RadGrid1.DataSource = new List<User>()
    {
        new User {Id = 1, FirstName = "Jon", LastName = "Doe"},
        new User {Id = 2, FirstName = "Eric", LastName = "Newton"},
        new User {Id = 3, FirstName = "One", LastName = "Two"},
    };
}

protected void DeleteButton_Click(object sender, EventArgs e)
{
    var ids = new List<int>();
    foreach (GridDataItem item in RadGrid1.Items)
    {
        var selectCheckBox = item.FindControl("SelectCheckBox") as CheckBox;
        if (selectCheckBox.Checked)
        {
            int id = Convert.ToInt32(item.GetDataKeyValue("Id"));
            ids.Add(id);
        }
    }
}
于 2013-07-30T18:30:44.640 回答
0

如果在 GridView 中单击按钮,则会引发一个名为“RowCommand”的事件。您可以通过标记指定它使用的方法:

<telerik:RadGrid ..attributes.. OnRowCommand="DoThisMethod">

然后在后面的代码中:

protected void DoThisMethod(object sender, EventArgs e)
{
    //Do your stuff
}

这意味着您现在可以将 GridView 放入面板中,因为无论如何它仍应引发行命令事件。

我不确定 RadGrid,但这肯定是 GridViews 的情况

于 2013-07-30T14:46:17.187 回答