如何在ASP.NET中的ListView的CheckedChanged事件中找到复选框的数据键?

5

我正在使用一个列表视图,在其中的项模板中,我使用了一个标签和一个复选框。 我希望每当用户点击复选框时,值应该更新到一个表格中。我在listview中使用了datakeys,在数据键的基础上,应该在表格中更新值。查询如下:

string updateQuery = "UPDATE [TABLE] SET [COLUMN] = " + Convert.ToInt32(chk.Checked) + " WHERE PK_ID =" + dataKey + " ";` 

我希望你能帮助我将结果显示在表格中,如果某个pkid对应的列的值为1,则应该勾选复选框。

以下是代码片段:

<asp:ListView ID="lvFocusArea" runat="server" DataKeyNames="PK_ID" OnItemDataBound="lvFocusArea_ItemDataBound">
    <LayoutTemplate>
        <table border="0" cellpadding="1" width="400px">
            <tr style="background-color: #E5E5FE">
                <th align="left">
                    Focus Area
                </th>
                <th>
                    Is Current Focused
                </th>
            </tr>
            <tr id="itemPlaceholder" runat="server">
            </tr>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr>
            <td width="80%">
                <asp:Label ID="lblFocusArea" runat="server" Text=""><%#Eval("FOCUS_AREA_NAME") %></asp:Label>
            </td>
            <td align="center" width="20%">
                <asp:CheckBox ID="chkFocusArea" runat="server" OnCheckedChanged="chkFocusArea_CheckedChanged" AutoPostBack="true" />
            </td>
        </tr>
    </ItemTemplate>
    <AlternatingItemTemplate>
        <tr style="background-color: #EFEFEF">
            <td>
                <asp:Label ID="lblFocusArea" runat="server" Text=""><%#Eval("FOCUS_AREA_NAME") %></asp:Label>
            </td>
            <td align="center">
                <asp:CheckBox ID="chkFocusArea" runat="server" OnCheckedChanged="chkFocusArea_CheckedChanged" AutoPostBack="true" />
            </td>
        </tr>
    </AlternatingItemTemplate>
    <SelectedItemTemplate>
        <td>
            item selected
        </td>
    </SelectedItemTemplate>
</asp:ListView>

请帮助我。


不强制要求你接受翻译,如果可以的话请提供结果,否则我会删除我的回答。 - Pranay Rana
2个回答

4

看这里:可能有助于解决您获取数据键的问题

protected void chkFocusArea_CheckedChanged(object sender, EventArgs e)  
{  
    CheckBox cb = (CheckBox)sender;  
    ListViewItem item = (ListViewItem)cb.NamingContainer; 
    ListViewDataItem dataItem = (ListViewDataItem)item ;
    string code = ListView1.DataKeys[dataItem.DisplayIndex].Value.ToString();
}

我正在使用Visual Web Developer 2008 Express Edition,但Intellisense中没有显示DisplayIndex项。 - Subbu
兄弟,这个属性也不可用。 - Subbu
我会将最后一行改为:lvFocusArea.DataKeys[dataItem.DisplayIndex]["PK_ID"]; - archangel76

1
使用数据绑定表达式
<asp:CheckBox ID="chkFocusArea" runat="server" Checked='<%# Eval("[COLUMN]")  %>' oncheckedchanged="chkFocusArea_CheckedChanged" AutoPostBack="true" />

在您的chkFocusArea_CheckedChanged事件处理程序中,执行数据库插入并重新绑定数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接