C# ASP.NET-如何从下拉列表SelectMethod属性中查找ListView中的控件
我有一个包含标签和下拉列表的ListView。我想使用下拉列表的SelectMethod属性中的C# ASP.NET-如何从下拉列表SelectMethod属性中查找ListView中的控件,c#,asp.net,listview,drop-down-menu,C#,Asp.net,Listview,Drop Down Menu,我有一个包含标签和下拉列表的ListView。我想使用下拉列表的SelectMethod属性中的FindControl()查找标签。这是我的密码: .aspx: <asp:ListView ID="ListView1" runat="server" DataKeyNames="ID" ItemType="Models.Items" SelectMethod="GetItem"> <ItemTemplate> <asp:Label ID
FindControl()
查找标签。这是我的密码:
.aspx:
<asp:ListView ID="ListView1" runat="server" DataKeyNames="ID"
ItemType="Models.Items" SelectMethod="GetItem">
<ItemTemplate>
<asp:Label ID="LabelItemId" runat="server"
Text="<%#: Item.ID %>"></asp:Label>
<asp:DropDownList ID="DropDownList1" runat="server"
SelectMethod="GetCategories" ItemType="Models.Category"
DataValueField="CategoryID" DataTextField="CategoryName">
</asp:DropDownList>
protected void GetCategories(object sender, ListViewItemEventArgs e)
{
using (var db = new ItemContext())
{
var dropDownList = (DropDownList)e.Item.FindControl("DropDownList1");
IQueryable<Category> query = db.Categories;
List<Category> categories = query.ToList();
//The line below is the problem because e is null
var item = categories.First(category => category.CategoryID ==
Convert.ToInt32(((Label)e.Item.FindControl("LabelItemId")).Text));
}
}
protected void DropDownList1_DataBound(object sender, EventArgs e)
{
var control = (Control)sender;
var lvi = (ListViewItem)control.NamingContainer;
var label = (Label)lvi.FindControl("LabelCategoryId");
string text = label.Text;
var ddl = (DropDownList)sender;
ddl.SelectedValue = text;
}
C#:
<asp:ListView ID="ListView1" runat="server" DataKeyNames="ID"
ItemType="Models.Items" SelectMethod="GetItem">
<ItemTemplate>
<asp:Label ID="LabelItemId" runat="server"
Text="<%#: Item.ID %>"></asp:Label>
<asp:DropDownList ID="DropDownList1" runat="server"
SelectMethod="GetCategories" ItemType="Models.Category"
DataValueField="CategoryID" DataTextField="CategoryName">
</asp:DropDownList>
protected void GetCategories(object sender, ListViewItemEventArgs e)
{
using (var db = new ItemContext())
{
var dropDownList = (DropDownList)e.Item.FindControl("DropDownList1");
IQueryable<Category> query = db.Categories;
List<Category> categories = query.ToList();
//The line below is the problem because e is null
var item = categories.First(category => category.CategoryID ==
Convert.ToInt32(((Label)e.Item.FindControl("LabelItemId")).Text));
}
}
protected void DropDownList1_DataBound(object sender, EventArgs e)
{
var control = (Control)sender;
var lvi = (ListViewItem)control.NamingContainer;
var label = (Label)lvi.FindControl("LabelCategoryId");
string text = label.Text;
var ddl = (DropDownList)sender;
ddl.SelectedValue = text;
}
受保护的void GetCategories(对象发送方,ListViewItemEventArgs e)
{
使用(var db=new ItemContext())
{
var dropDownList=(dropDownList)e.Item.FindControl(“DropDownList1”);
IQueryable query=db.Categories;
列表类别=query.ToList();
//下一行是问题所在,因为e为null
var item=categories.First(category=>category.CategoryID==
将.ToInt32(((标签)e.Item.FindControl(“LabelItemId”).Text));
}
}
问题是
ListViewItemEventArgs
的e
为空。因此,我得到了一个NullReferenceException
。可能原因是我不应该将ListViewItemEventArgs
用于SelectMethod
属性。如果是这样,我应该用什么 您需要迭代一个循环以获得标签值,如下所示:
foreach (ListViewItem item in ListView1.Items)
{
Label mylabel = (Label)item.FindControl("Label1");
lblID.Text = mylabel.Text;
}
注意:这也适用于其他控件
如果它不起作用,还有另一个解决方案。请执行以下操作:
ListViewItem item = ListView1.Items[ListView1.SelectedIndex];
Label myLabel = (Label)item.FindControl("Label1");
string result = myLabel.text; //Get the text here
您需要迭代循环以获得标签值,如下所示:
foreach (ListViewItem item in ListView1.Items)
{
Label mylabel = (Label)item.FindControl("Label1");
lblID.Text = mylabel.Text;
}
注意:这也适用于其他控件
如果它不起作用,还有另一个解决方案。请执行以下操作:
ListViewItem item = ListView1.Items[ListView1.SelectedIndex];
Label myLabel = (Label)item.FindControl("Label1");
string result = myLabel.text; //Get the text here
只需将
OnDataBound
属性添加到DropDownList
并为OnDataBound
事件编写此方法:
C#:
<asp:ListView ID="ListView1" runat="server" DataKeyNames="ID"
ItemType="Models.Items" SelectMethod="GetItem">
<ItemTemplate>
<asp:Label ID="LabelItemId" runat="server"
Text="<%#: Item.ID %>"></asp:Label>
<asp:DropDownList ID="DropDownList1" runat="server"
SelectMethod="GetCategories" ItemType="Models.Category"
DataValueField="CategoryID" DataTextField="CategoryName">
</asp:DropDownList>
protected void GetCategories(object sender, ListViewItemEventArgs e)
{
using (var db = new ItemContext())
{
var dropDownList = (DropDownList)e.Item.FindControl("DropDownList1");
IQueryable<Category> query = db.Categories;
List<Category> categories = query.ToList();
//The line below is the problem because e is null
var item = categories.First(category => category.CategoryID ==
Convert.ToInt32(((Label)e.Item.FindControl("LabelItemId")).Text));
}
}
protected void DropDownList1_DataBound(object sender, EventArgs e)
{
var control = (Control)sender;
var lvi = (ListViewItem)control.NamingContainer;
var label = (Label)lvi.FindControl("LabelCategoryId");
string text = label.Text;
var ddl = (DropDownList)sender;
ddl.SelectedValue = text;
}
这将根据
列表视图中每个项目的标签文本更改下拉列表的SelectedValue
,只需将OnDataBound
属性添加到DropDownList
并为OnDataBound
事件编写此方法:
C#:
<asp:ListView ID="ListView1" runat="server" DataKeyNames="ID"
ItemType="Models.Items" SelectMethod="GetItem">
<ItemTemplate>
<asp:Label ID="LabelItemId" runat="server"
Text="<%#: Item.ID %>"></asp:Label>
<asp:DropDownList ID="DropDownList1" runat="server"
SelectMethod="GetCategories" ItemType="Models.Category"
DataValueField="CategoryID" DataTextField="CategoryName">
</asp:DropDownList>
protected void GetCategories(object sender, ListViewItemEventArgs e)
{
using (var db = new ItemContext())
{
var dropDownList = (DropDownList)e.Item.FindControl("DropDownList1");
IQueryable<Category> query = db.Categories;
List<Category> categories = query.ToList();
//The line below is the problem because e is null
var item = categories.First(category => category.CategoryID ==
Convert.ToInt32(((Label)e.Item.FindControl("LabelItemId")).Text));
}
}
protected void DropDownList1_DataBound(object sender, EventArgs e)
{
var control = (Control)sender;
var lvi = (ListViewItem)control.NamingContainer;
var label = (Label)lvi.FindControl("LabelCategoryId");
string text = label.Text;
var ddl = (DropDownList)sender;
ddl.SelectedValue = text;
}
这将根据列表视图中每个项目的标签文本更改下拉列表的SelectedValue
,当我使用foreach时,它甚至不会进入foreach循环。这很奇怪,因为我的listview好像没有任何项目,但它有。我已经更新了帖子。看看是否有帮助。对我来说,它工作得很好。在什么情况下我应该把代码放在哪里?目前,我把它放在我的dropdownlistSelectMethod
属性中,因为我希望dropdownlist的SelectedValue
与标签文本相同。当我尝试你的新代码时,它仍然说我的列表视图中没有任何项目。似乎列表视图
尚未加载。不过,我已经找到了解决方案。我触发dropdownlist
的OnDataBound
事件,然后使用objectsender
参数访问ListViewItem
的NamingContainer
属性。从那里,我可以使用FindControl()
来获取标签文本。当我使用foreach时,它甚至不进入foreach循环。这很奇怪,因为我的listview好像没有任何项目,但它有。我已经更新了帖子。看看是否有帮助。对我来说,它工作得很好。在什么情况下我应该把代码放在哪里?目前,我把它放在我的dropdownlistSelectMethod
属性中,因为我希望dropdownlist的SelectedValue
与标签文本相同。当我尝试你的新代码时,它仍然说我的列表视图中没有任何项目。似乎列表视图
尚未加载。不过,我已经找到了解决方案。我触发dropdownlist
的OnDataBound
事件,然后使用objectsender
参数访问ListViewItem
的NamingContainer
属性。从那里,我可以使用FindControl()
获取标签文本。