【问题标题】:Programmatically Add Control To DataGrid以编程方式将控件添加到 DataGrid
【发布时间】:2015-12-29 14:50:33
【问题描述】:

我正在尝试查找网格的最后一行,并以编程方式将下拉列表添加到网格中。我的代码编译没有问题,但是在单步执行代码时我的RowDataBound 永远不会被命中,导致列表永远不会被添加。我有什么不正确的编码?

编辑
页面加载,您从下拉列表中选择一个选项。此时会调用 RefreshdatagridTest。
编辑结束


ASP 代码

<div class="CenterGrid">
    <asp:DataGrid runat="server" ID="datagridTest" AutoGenerateColumns="false" 
Width="500px" CssClass="DataGrids" HorizontalAlign="Center" GridLines="Both"
ShowFooter="true"     OnSelectedIndexChanged="datagridTest_SelectedIndexChanged" 
OnItemCommand="datagridTest_ItemCommand" RowDataBound="datagridTest_RowDataBound" Visible="true">
        <ItemStyle CssClass="row" />
        <FooterStyle CssClass="DataGridFooters" />
        <HeaderStyle CssClass="DataGridHeaders" />
        <Columns>
            <asp:BoundColumn DataField="Firefly" HeaderText="Name"></asp:BoundColumn>
            <asp:ButtonColumn CommandName="Delete" HeaderText="Delete From List" Text="[Remove]"></asp:ButtonColumn>
        </Columns>
    </asp:DataGrid>
</div>

C# 代码

protected void datagridTest_RowDataBound(object sender, GridViewRowEventArgs e)
{
  if (e.Row.RowIndex == datagridTest.Items.Count - 1)
  {
    DropDownList ddl = new DropDownList();
    e.Row.Cells[0].Controls.Add(ddl);
  }
}

protected void datagridTest_ItemCommand(object source, DataGridCommandEventArgs e)
{
  LinkButton lnkbtn = ((LinkButton)e.CommandSource);
  if (e.CommandName == "Delete")
  {
    DataGridItem deletecontrol = (DataGridItem)lnkbtn.NamingContainer;
    string bomb = deletecontrol.Cells[0].Text;
    RemoveFireflyFromList(bomb);
    RefreshdatagridTest();
  }
}

网格如何绑定数据

protected void listselect_SelectedIndexChanged(object sender, EventArgs e)
{
  RefreshdatagridTest();
}


private void RefreshdatagridTest()
{
  dataSet = Run sql procedure to get results;
  this.datagridTest.DataSource = dataSet;
  this.datagridTest.DataBind();
}

【问题讨论】:

  • 您实际上是在将网格绑定到数据源吗?请同时添加该代码。
  • 当您通过时,RefreshdatagridTest 会被调用吗?
  • @EdT - 页面加载,您从下拉列表中选择一个选项。此时会调用 RefreshdatagridTest。

标签: c# asp.net datagrid


【解决方案1】:

它有点不同,因为在我的示例中,我在运行时生成新行,但基本上它是如何工作的; 在我的情况下,必须添加一些大小参数或控件被隐藏。 所以我只需设置控制行并将该行添加到网格中。

Mycontrol m = new Mycontrol();
     RowDefinition rowDef1 = new RowDefinition();

                rowDef1.MaxHeight = m.ExpandedSise;
                rowDef1.MinHeight = m.Height;
                rowDef1.Height = new GridLength(m.RowDefColapsedSize);
                int rownumber = grid2.RowDefinitions.Count;
                grid2.RowDefinitions.Insert(rownumber, rowDef1);
                Grid.SetRow(m, rownumber);
                m.counter.Content = Grid.GetRow(m).ToString();
                grid2.Children.Add(m);

【讨论】:

  • 因为我的 'RowDataBound' 方法没有被调用,添加这个语法以便执行的正确方法是什么?
  • 看起来 RowDefinition 用于 Windows.Control。这是一个网络项目。
猜你喜欢
  • 2016-06-17
  • 2011-03-17
  • 1970-01-01
  • 2010-10-16
  • 2011-02-18
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 2018-10-30
相关资源
最近更新 更多