【问题标题】:Pass row index to modal popup window from buttonField in GridView将行索引从 GridView 中的 buttonField 传递到模式弹出窗口
【发布时间】:2015-03-05 16:04:29
【问题描述】:

我有一个 GridView(见下文),它使用 ButtonField 按钮来启动模式弹出窗口。 这是网格视图

 <asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_ButtonClick"  OnSelectedIndexChanged="GridView1_SelectedIndexChanged" CssClass="mGrid" AllowPaging="True" PagerStyle-CssClass="pgr"  
    AlternatingRowStyle-CssClass="alt" OnRowEditing="GridView1_RowEditing" AutoGenerateColumns="False">
                        <AlternatingRowStyle BackColor="#F7F7F7" CssClass="alt" />
                        <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
                        <Columns>
                            <asp:BoundField HeaderText="BeaconID" ShowHeader="True" Visible="True" DataField="beaconObjectid" />
                            <asp:BoundField DataField="aliasName" HeaderText="My Beacon Name" />
                            <asp:ButtonField ButtonType="Button" CommandName="AssignName" Text="Assign Name"/>
                            <asp:BoundField HeaderText="Action Type" DataField="actionType" />
                            <asp:BoundField DataField="actionContent" HeaderText="Action Content" />
                            <asp:ButtonField ButtonType="Button" CommandName="AssignAction" Text="Assign/Change Action"/>

                        </Columns>
                        <PagerStyle CssClass="pgr" />
                    </asp:GridView>

使用下面显示的 C# 代码可以很好地打开像这样的模式窗口:

 <asp:Button ID="showModal3" runat="server" Text="Show Modal"  CssClass="hiddenButton"/>
    <asp:Panel ID="Panel3" runat="server" CssClass="modalPopup">
        <div class="header">
        Set Alias Name
    </div>
        <div class="body">
            Set a new name for your beacon
            <br />

            <br />

            <div style="float: none;">
               <asp:TextBox ID="AliasNameTextBox" runat="server" Height="21px" Width="300px"></asp:TextBox> 
            </div>

            </div><br/>

         <div class="footer" align="right">
        <asp:Button ID="setAliasOK" runat="server" Text="OK" CssClass="yes" OnClick="setAliasOK_Click" CausesValidation="False" />
        <asp:Button ID="setAliasCancel" runat="server" Text="Cancel" CssClass="no" />
    </div></asp:Panel>
    <ajaxToolkit:ModalPopupExtender ID="SetAliasNameModalPopupExtender" runat="server" CancelControlID="setAliasCancel" DropShadow="True" PopupControlID="Panel3" TargetControlID="showModal3" BackgroundCssClass="modalBackground"></ajaxToolkit:ModalPopupExtender>

在我的 C# 代码中,我得到了按钮的索引,所以我知道点击了哪一行,这一切都很好:

   protected void GridView1_ButtonClick(object sender, GridViewCommandEventArgs e)
        {
            GridViewRow row = GridView1.Rows[Convert.ToInt32(e.CommandArgument)]; // this gets the row
            string id = row.Cells[0].Text;
            string name = row.Cells[1].Text;
            string actionText = row.Cells[3].Text;

            if (e.CommandName == "AssignName")
            {
                SetAliasNameModalPopupExtender.Show();
                AliasNameTextBox.Text = name;
            }

            if (e.CommandName == "AssignAction")
            {
                ChooseActionModalPopupExtender.Show();
            }

            Label1.Text = name;
            Label2.Text = actionText;
            Label3.Text = id;

            currentlySelectedRow = Convert.ToInt32(e.CommandArgument);
            beaconIDnumber = id;
        } 

问题是当我从 modal 弹出窗口中单击“确定”按钮时。我需要从调用它的 gridview 按钮字段访问行索引。我的 OK 按钮单击事件如下所示:

protected void setAliasOK_Click(object sender, EventArgs e)
        {
           var newName = AliasNameTextBox.Text;

            ParseChangeAliasName(beaconIDnumber, newName);

            SetAliasNameModalPopupExtender.Hide();
        }

所以最终我要问的是如何将 gridview 行传递给模态窗口,以便我可以使用来自相应行单元格的数据 - 在这种情况下是信标 ID(gridview 中的 DataField="beaconObjectid") . 我什至尝试在 GridView1_ButtonClick 方法中设置全局变量,然后在 setAliasOK_Click 方法中引用它们,但是一旦模式窗口打开,它们就会被擦除。 理想情况下,如果可能的话,我想在不使用 Javascript 的情况下做到这一点。

【问题讨论】:

    标签: c# asp.net gridview modalpopupextender


    【解决方案1】:

    以同样的方式获得

    GridViewRow row = GridView1.Rows[Convert.ToInt32(e.CommandArgument)];
    

    你可以设置你的按钮属性:

    setAliasOK.CommandName = "AliasOK" ;
    setAliasOK.CommandArgument = e.CommandArgument ;
    

    但是您需要处理按钮的 RowCommand 事件而不是 Click 事件来获取按钮的命令参数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      相关资源
      最近更新 更多