我一直在努力尝试使用1复选框获取listview,有一个itemtemplate来显示datakey值或Text值。
<ItemTemplate>
<asp:CheckBox ID="chkPreferences" runat="server" Text='<%#Eval ("DESCRIPTION") %>' />
</ItemTemplate>
我将listview上的datakeynames属性设置为PreferenceID
然后在我的代码后面我用这段代码绑定了listvie
if (Session["IDValue"] != null)
{
int gen = Convert.ToInt32(Session["IDValue"]);
lstPreferences.DataSource = mdb.GetPreferences(gen);
lstPreferences.DataBind();
}
然后我在点击事件中向该页面添加了一个按钮。
if (lstPreferences.Items.Count > 0)
{
for (int i = 0; i < lstPreferences.Items.Count; i++)
{
CheckBox listChecked = (CheckBox)lstPreferences.Items[i].FindControl("chkPreferences");
if (listChecked.Checked)
{
LabelResult.Text = listChecked.Text;
}
}
}
基本上我试图检查每个复选框的选中值,并将其显示在标签中。我搜索了许多有这个问题的人,试图用几种不同的方式重构代码,但最后我似乎无法弄清楚我做错了什么。此外,当我把listChecked.Checked时,它甚至没有识别出复选框被选中。
由于
答案 0 :(得分:0)
听起来您需要获取数据绑定代码并确保它仅在初始页面加载时触发(而不是在回发上)。否则,在点击事件有可能触发之前,您将使用数据库中的原始数据重新加载ListView。
这样的事情应该有效:
If(!Page.IsPostBack)
{
if (Session["IDValue"] != null)
{
int gen = Convert.ToInt32(Session["IDValue"]);
lstPreferences.DataSource = mdb.GetPreferences(gen);
lstPreferences.DataBind();
}
}