我有一个DropDownList,如下所示:
<asp:GridView ID="moduleInfo" runat="server" DataSourceID="currentModules" class="table table-striped table-bordered" AutoGenerateColumns="false" GridLines="None">
<Columns>
<asp:TemplateField HeaderText="module" ItemStyle-Width="30" >
<ItemTemplate>
<asp:DropDownList ID="entryLevel" CssClass="form-control" runat="server">
<asp:ListItem Text="Level 1" Value="1"></asp:ListItem>
<asp:ListItem Text="Level 2" Value="2"></asp:ListItem>
<asp:ListItem Text="Level 3" Value="3"></asp:ListItem>
<asp:ListItem Text="Level 4" Value="4"></asp:ListItem>
<asp:ListItem Text="Level 5" Value="5"></asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
当我尝试在后面的代码中引用它时,键入entryLevel
无法识别,所以我使用下面的代码:
DropDownList ddl = (DropDownList)moduleInfo.FindControl("entryLevel");
string Level = ddl.SelectedValue;
每当我运行网页并选择值时,我都会收到错误:
对象引用未设置为对象的实例
任何人都知道我为什么会收到此错误?
答案 0 :(得分:0)
你缺少Rows
GridView类来获得下面一行的确切DropDownList替换:
DropDownList ddl = (DropDownList)moduleInfo.Rows[rowIndex].FindControl("entryLevel");
如果你在RowCommand事件中使用你的代码,那么你可以得到rowIndex
,如下所示:
GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer);
int rowIndex = row.RowIndex;