我遇到了一些问题,让我花一些时间进行测试。
我有一个ListView
和一个checkbox
以及一个外面的按钮。
当我click button
时,会显示行Tr ID
的行checkbox checked
。
但始终显示ctrl2
而不是ID。
这是我的代码:
<asp:ListView ID="ListView1" runat="server">
<LayoutTemplate>
<table cellspacing="0" border="0">
<tr>
<th scope="col" width="125">Man
</th>
<th scope="col" width="50">Type
</th>
<th scope="col" width="400">Reason
</th>
<th scope="col" width="125">date
</th>
<th scope="col" width="100">cheack
</th>
<th scope="col" width="125">remark
</th>
</tr>
<tr runat="server" id="itemPlaceholder" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr id="<%#Eval("ID").ToString()%>" runat="server">
<td scope="col" >
<%#Eval("UserID").ToString()%>
</td>
<td scope="col">
<%#Eval("Purpose").ToString() %>
</td>
<td scope="col">
<%#Eval("Reason").ToString() %>
</td>
<td scope="col">
<%#dateSession(Convert.ToDateTime( Eval("startTime"))) %>
</td>
<td scope="col">
<asp:CheckBox ID="CheckBox1" runat="server" Checked="True" />
</td>
<td scope="col">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
&#13;
这是我背后的代码
protected void Btn_save_Click(object sender, EventArgs e)
{
foreach (ListViewItem row in this.ListView1.Items)
{
CheckBox stylistcheck = (CheckBox)row.FindControl("CheckBox1");
if (stylistcheck.Checked == true)
{
Response.Write(row.ID);
// Always get wrong ID , like 'ctrl3' not real rows Tr ID
}
}
}
答案 0 :(得分:1)
执行此操作 size_t siz = some_size();
void* p = malloc(siz);
if (!p) { perror("malloc"); exit(EXIT_FAILURE); };
会抛出错误,AFAIR。如果您的目标是为代表您数据的每一行获取<tr id="<%#Eval("ID").ToString()%>" runat="server">
,那么您只需添加一个文字控件,隐藏它,并在代码隐藏中获得它的价值。类似的东西:
ID
在代码隐藏中,<tr runat="server">
<td scope="col" >
<%# Eval("UserID").ToString()%>
<asp:Literal ID="idLiteral" runat="server" Text='<%# Eval("ID").ToString()%>' Visible="false" ></asp:Literal>
</td>
...rest of your code goes here...
</tr>
内部执行if (stylistcheck.Checked == true)
,如此:
Response.Write(((Literal)row.FindControl("idLiteral")).Text);
答案 1 :(得分:0)
CheckBox1.Checked = true;
它可能对你有帮助。
OR
CheckBox chkDelete = (CheckBox)item.FindControl("CheckBox1");
if(chkDelete.Checked)
{
string yourID = item.DataItem["id"].ToString();
itemsToDelete.Add(yourID);
}
OR
if (CheckBox1.Checked==true)
{
}
这也可能适合你。
答案 2 :(得分:0)
yourListView.DataSource = GetCourses();
yourListView.DataBind();
var checkBox = yourListView.Controls.Cast<Control>).First().FindControl("yourID")
或
if (item.ItemType == ListViewItemType.DataItem){
CheckBox final = (CheckBox)item.FindControl("yourID");
if (final.Checked) {
}
答案 3 :(得分:0)
只是想知道你确定可以运行这段代码吗?
<tr id="<%#Eval("ID").ToString()%>" runat="server">
我尝试了你的代码并运行它会在这一行遇到错误...
因为“你会得到错误服务器标签没有很好地形成。
如果我使用这个'错误将是:
控件的ID属性只能使用标记中的ID属性和简单值来设置。
我编写的代码将检索ID可能对您有帮助......
的.aspx
<asp:ListView ID="ListView1" runat="server" >
<LayoutTemplate>
<table id="tbllol" runat="server" cellspacing="0" border="0">
<tr>
<th scope="col" width="100">cheack
</th>
<th scope="col" width="125">remark
</th>
</tr>
<tr runat="server" id="itemPlaceholder" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td scope="col">
<asp:CheckBox ID="chkBox" runat="server" Checked="true" />
<asp:Label ID="lblID" runat="server" Text='<%# Eval("ID") %>' Visible="false"></asp:Label>
</td>
<td scope="col">
<asp:TextBox ID="txtRemarks" runat="server"></asp:TextBox>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
<asp:Button ID="btn" runat="server" Text="Save" OnClick="btn_Click" />
.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
// Check
if (!IsPostBack)
{
// Variable
DataTable dt = new DataTable();
dt.Columns.Add("ID");
// Loop & Add ID
for (int i = 0; i < 10; i++) dt.Rows.Add("myIDIi" + i);
ListView1.DataSource = dt;
ListView1.DataBind();
}
}
protected void btn_Click(object sender, EventArgs e)
{
// Variable
string value = string.Empty;
// Loop
foreach (ListViewItem row in ListView1.Items)
{
// Find Control
CheckBox chkbox = row.FindControl("chkBox") as CheckBox;
Label lblID = row.FindControl("lblID") as Label;
// Check & Check Then Set to Value
if (chkbox != null && chkbox.Checked)
if (lblID != null) value += lblID.Text.Trim() + "<br />";
}
Response.Write(value);
}