嘿那里,我在VB.NET中有一个项目工作正常,基本上有一个Datagrid,其中包含一个TemplateColumn,它是一列Checkboxes。声明datagrid的代码在这里......
<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>
你可以看到Checkbox有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
你看到的所有东西都工作得很好......从某种意义上说,当我点击其中一个复选框时,page_load触发,gridItemDataBound触发DataBind(),当完成所有操作后,复选框保留了用户点击了复选框。
将所有这些完全相同的代码转换为C#....事件全部以相同的顺序激活,但复选框选中的值总是清除......任何想法??
答案 0 :(得分:0)
我会说问题是你在每次回发时绑定网格(我无法解释VB和C#之间的区别)。这会清除您的选择。你为什么这样做?
答案 1 :(得分:0)
您在每个page_load上绑定网格,这会导致复选框始终相同。
尝试在ItemDataBound上附加checkedchange事件,当事件触发时,将复选框值存储在会话变量上。
在ItemDataBound上,检查会话变量,如果为null,则运行此代码,否则从会话变量中读取复选框的值
在Page_Load上,如果不是IsPostBack(页面是第一次加载),请将会话值设置为null