[英]Pass row index to modal popup window from buttonField in GridView
我有一個GridView(見下文),它使用ButtonField按鈕啟動模態彈出窗口。 這是GridView
<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;
}
問題是當我從我的模態彈出窗口中單擊“確定”按鈕時。 我需要從調用它的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的情況下執行此操作。
以同樣的方式得到
GridViewRow row = GridView1.Rows[Convert.ToInt32(e.CommandArgument)];
你可以設置你的Button屬性:
setAliasOK.CommandName = "AliasOK" ;
setAliasOK.CommandArgument = e.CommandArgument ;
但是您需要處理按鈕的RowCommand事件而不是Click事件以獲取Button的Command參數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.