我试图通过使用复选框来查看是否已选择行。该行位于ListView内部。我得到了一个空对象错误。
<td>
<asp:CheckBox id="CheckBox1" runat="server"
value='<%# Eval("rdvId") %>'
AutoPostBack="true"
OnCheckedChanged="Check_Clicked"/>
</td>
protected void Check_Clicked(Object sender, EventArgs e)
{
int KeyId = 0;
foreach (ListViewDataItem item in ListView1.Items)
{
/* if (((CheckBox)item.FindControl("MyCheckBox")).Checked) */
CheckBox myCheckBox = (CheckBox)item.FindControl("MyCheckBox");
if (myCheckBox.Checked) // <=== generate a null object.
{
KeyRdvId = Convert.ToInt32(ListView1.DataKeys[item.DataItemIndex].Value);
// ( I want to get the key of the selected listview)
}
}
}
我在过程中使用了这段代码protected void btnSubmit_Click(object sender,EventArgs e) 它在那里工作!!!
protected void btnSubmit_Click(object sender, EventArgs e)
{
int iCptCheckBox = 0;
int indxChkBox = 0;
foreach (ListViewDataItem item in ListView1.Items)
{
var chk = item.FindControl("MyCheckBox") as System.Web.UI.HtmlControls.HtmlInputCheckBox;
if (chk != null && chk.Checked)
{
indxChkBox = Convert.ToInt32(chk.Value);// <==== here it is working
知道为什么它不能在第一个工作吗?
答案 0 :(得分:3)
您正在寻找ID为MyCheckBox
的控件,但如果您查看自己的asp代码,则ID为CheckBox1
,请将您的代码更改为以下内容:
CheckBox myCheckBox = (CheckBox)item.FindControl("CheckBox1");
if (myCheckBox.Checked) // <=== generate a null object.
{
KeyRdvId = Convert.ToInt32(ListView1.DataKeys[item.DataItemIndex].Value);
// ( I want to get the key of the selected listview)
}
答案 1 :(得分:0)
复选框没有value属性。
根据定义,CheckBox是一个布尔值,由其ID标识。您需要做的就是检查是否已经检查过。
如果您确实需要为复选框指定值,则可以使用InputAttributes
:
添加:
myChk.InputAttributes.Add("value", "My Value");
访问值:
myChk.InputAttributes["value"];
答案 2 :(得分:0)
我有一次类似的屏幕,我觉得最好处理使用责任分离。换句话说,我做了一个子控件并将其放在列表框中,然后我将一个属性映射到控件,并使控件处理控件所需的逻辑。