Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Datagrid中的复选框在VB.NET中回发时保留选中值,但不保留C#_Asp.net_.net_Vb.net - Fatal编程技术网

Asp.net Datagrid中的复选框在VB.NET中回发时保留选中值,但不保留C#

Asp.net Datagrid中的复选框在VB.NET中回发时保留选中值,但不保留C#,asp.net,.net,vb.net,Asp.net,.net,Vb.net,嘿,我在VB.NET中有一个项目,它运行良好,基本上有一个Datagrid,其中包含一个TemplateColumn,这是一列复选框。声明datagrid的代码在这里 <asp:datagrid id="dgDates" OnItemCommand="gridEventHandler" BorderColor="Black" BorderWidth="1px" CellPadding="3" runat="server" AutoGenerateColumns="False" Horizo

嘿,我在VB.NET中有一个项目,它运行良好,基本上有一个Datagrid,其中包含一个TemplateColumn,这是一列复选框。声明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>
此外,我的代码隐藏还有以下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的一切都运行得非常好……从某种意义上说,当我单击其中一个复选框时,页面加载将触发,gridItemDataBound将在DataBind()上触发,当所有操作完成后,复选框将保留用户单击复选框时的值


所有这些完全相同的代码都转换为C#…事件都以相同的顺序触发,但复选框的选定值总是清除…有什么想法吗?

我想说的是,问题是每次回发都要绑定网格(我无法解释VB和C#之间的区别)。这将清除您的选择。为什么要这样做?

每次加载页面时都会绑定网格,这会使复选框始终保持不变

尝试在ItemDataBound上附加checkedchange事件,当事件激发时,将复选框值存储在会话变量上

在ItemDataBound上,检查会话变量,如果为null,则运行此代码,否则从会话变量中读取复选框的值


在Page_Load上,如果不是IsPostBack(Page是第一次加载),请将会话值设置为null

抱歉,但我认为您一定缺少什么。据我所知,改变语言不会导致不同的行为,因为它不是特定于语言的,而是特定于框架的。请再检查一遍。可能您缺少更新面板或其他东西…?由于C#没有
CType
,可能您的转换中有错误。你能发布C代码吗?老实说,我不知道为什么这么做…我大约在一年前写了VB版本,它在每次回发时也会绑定网格,但不会丢失选择,就在最近,我不得不将这段代码转换为C#对于一个新的应用程序,它将成为其中的一部分,我注意到它正在清除选择…一个问题是,此页面的每次加载都是回发,甚至是第一次,因为它是页面中ascx控件中的ascx控件,所以它只会被加载到postback@ScottFortier:仅当网格未回发时才绑定网格。如果(!Page.IsPostback)dgDates.DataSource。。。。出于测试目的,我们可以看看这是否是问题,这似乎是问题的根源…我只是浏览了代码,跳过了每个回发上的数据源/数据绑定行,除了第一个,似乎这就是问题…嗯,我昨天花了好几个小时来解决这个问题……感谢你提供了一个明显但有用的指针……我相信我能想出一些使用viewstate的系统来确定第一次回发的时间和所有后续回发的时间
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