簡體   English   中英

Datagrid中的復選框保留VB.NET中回發時的檢查值,但不保留C#

[英]Checkbox within Datagrid retaining checked value on postback in VB.NET but not C#

嘿,我在VB.NET中有一個工作正常的項目,該項目實質上具有一個Datagrid,該Datagrid包含一個TemplateColumn,這是Checkboxes的一列。 聲明數據網格的代碼在這里...

<asp:datagrid id="dgDates" OnItemCommand="gridEventHandler" BorderColor="Black" BorderWidth="1px"
CellPadding="3" runat="server" AutoGenerateColumns="False" HorizontalAlign="Left" AllowSorting="True"
OnSortCommand="SortData" OnItemDataBound="gridItemDataBound">
<HeaderStyle Font-Underline="True" Font-Bold="True" HorizontalAlign="Center" ForeColor="Black"
    BackColor="#D4D0C8"></HeaderStyle>
<Columns>
    <asp:BoundColumn DataField="strParameterName" SortExpression="strParameterName" HeaderText="Parameter Name"></asp:BoundColumn>
    <asp:BoundColumn DataField="dtParameterValue" SortExpression="dtParameterValue" HeaderText="Parameter Value"></asp:BoundColumn>
    <asp:TemplateColumn HeaderText="Constant" SortExpression="blnStatic" ItemStyle-HorizontalAlign="Center">
        <ItemTemplate>
            <asp:CheckBox ID="cbStaticRolling" Checked="False" Runat="server" AutoPostBack="true"></asp:CheckBox>
        </ItemTemplate>
    </asp:TemplateColumn>
</Columns>

如您所見,復選框具有Autopostback =“ true”,但是頁面上還有其他東西也會產生回發。

我的Page_load里面有這個,每次頁面加載時都會調用,包括回發...

Dim strGUID As String
strGUID = Session("strGUID")
dgDates.DataSource = SqlHelper.ExecuteDataset(ConfigurationManager.AppSettings(Web.  [Global].CfgKeyConnStringADMIN), "dbo.spRptGetSchedulingDates", strGUID)
dgDates.DataBind()
intNumberOfDates = dgDates.Items().Count

以及我后面的代碼對gridItemDataBound具有以下代碼

Protected Sub gridItemDataBound(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)
    'hide the intRptSchedulingDatesID for each row in the checkbox's content style variable
    If (e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem) Then
        CType(e.Item.FindControl("cbStaticRolling"), CheckBox).Style("Content") = CType(e.Item.DataItem, System.Data.DataRowView).Item("intRptSchedulingDatesID")
    End If
End Sub

你看到的一切sbove工作完全正常......在這個意義上,當我點擊其中一個復選框,在Page_Load火災,上的DataBind的gridItemDataBound火災(),當一切完成后,該復選框保留用戶點擊的價值復選框。

將所有這些完全相同的代碼轉換為C#....所有事件均以相同順序觸發,但是復選框選擇的值始終清除...任何想法?

我要說的問題是,您在每次回發中都綁定了網格(我無法解釋VB和C#之間的區別)。 這會清除您的選擇。 你為什么做這個?

您在每個page_load上綁定網格,這將導致復選框始終相同。

嘗試在ItemDataBound上附加一個checkedchange事件,並在事件觸發時,將復選框值存儲在會話變量中。

在ItemDataBound上,檢查會話變量,如果它為null,則運行此代碼,否則從會話變量中讀取復選框的值

然后在Page_Load上,如果不是IsPostBack(頁面正在第一次加載),則將會話值設置為null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM