【问题标题】:Locating dropdownlist inside of asp.net gridview template field in C#在 C# 中的 asp.net gridview 模板字段中定位下拉列表
【发布时间】:2015-01-14 06:11:21
【问题描述】:

所以我有这个gridview,如下所示:

<asp:GridView ID="gridDetaljiNarudzbe" AutoGenerateColumns="false" AllowPaging="true" PageSize="10" runat="server" OnRowCommand="gridDetaljiNarudzbe_RowCommand" OnPageIndexChanging="gridDetaljiNarudzbe_PageIndexChanging" OnRowDataBound="gridDetaljiNarudzbe_RowDataBound">
    <Columns>
       <asp:BoundField DataField="Naziv" HeaderText="Naziv" />
       <asp:BoundField DataField="Sifra" HeaderText="Šifra" />
       <asp:BoundField DataField="Cijena" HeaderText="Cijena" />
       <asp:BoundField DataField="Kolicina" HeaderText="Količina" />
            <asp:TemplateField HeaderText="Ocjena">
            <ItemTemplate>
                <asp:DropDownList  ID="DropDownList1" runat="server"></asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
      <asp:TemplateField>
          <ItemTemplate> 
              <asp:LinkButton ID="btnOcijeni" title="Ocijeni proizvod" CommandName="OcijeniCommand" CommandArgument='<%# Eval("ProizvodID") %>' runat="server"><img src="../images/ocijeni.png" /></asp:LinkButton>
          </ItemTemplate>
      </asp:TemplateField>
    </Columns>
</asp:GridView>

我想知道有什么方法可以访问这个下拉列表并用数据填充它。我已经尝试了以下代码,但它们都不起作用,都返回错误“对象引用未设置为实例”:

      DropDownList drop =  gridDetaljiNarudzbe.FindControl("DropDownList1") as DropDownList;

然后我会执行以下操作:drop.Items.Add(new ListItem("test"));

我也尝试过使用 RowDataBound 事件,但也没有用...

DropDownList droplist = e.Row.FindControl("DropDownList1") as DropDownList;

然后使用以下代码填充网格只是为了测试它是否有效:

drop.Items.Add(new ListItem("test"));

但是这些都不起作用......我还想知道如何从这个下拉列表中获取一个值,并在有人从中获取某些内容时将其插入数据库。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 使用ObjectDataSource 并指向您的DropDownList 使用它更简单。

标签: c# asp.net gridview findcontrol rowdatabound


【解决方案1】:

应该这样做

foreach (GridViewRow gr in gridDetaljiNarudzbe.Rows)
{
    DropDownList drop =  gr.FindControl("DropDownList1") as DropDownList;
    drop.Items.Add(new ListItem("test"));
}

或者如果你想在RowDataBound事件中这样做

protected void gridDetaljiNarudzbe_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DropDownList drop =  e.Row.FindControl("DropDownList1") as DropDownList;
        drop.Items.Add(new ListItem("test"));
    }
}

【讨论】:

  • 谢谢它的工作!!!当我想从下拉列表中提取值并将其插入数据库时​​,是否重复相同的过程?
  • 是的,您可以使用第一个代码从下拉列表中获取值。
  • 我现在正在尝试从 TextBox 字段中获取一个值,当我尝试使用同一行代码获取它时,它说:输入文本格式不正确...任何想法可能是什么?
  • 我认为该错误不在此问题的上下文中,但之前已在 SO 上提出过此问题,例如 here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
相关资源
最近更新 更多