C# 以编程方式向DataGrid添加控件
我试图找到网格的最后一行,并以编程方式向网格中添加一个下拉列表。我的代码编译时没有问题,但在单步执行代码时,我的C# 以编程方式向DataGrid添加控件,c#,asp.net,datagrid,C#,Asp.net,Datagrid,我试图找到网格的最后一行,并以编程方式向网格中添加一个下拉列表。我的代码编译时没有问题,但在单步执行代码时,我的RowDataBound从未被点击,从而导致列表从未被添加。我不正确地编码了什么 编辑 页面将加载,您可以从下拉列表中选择一个选项。此时将调用RefreshdatagridTest。 编辑结束 ASP代码 <div class="CenterGrid"> <asp:DataGrid runat="server" ID="datagridTest" AutoG
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>
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();
}
它有点不同,因为在我的示例中,我在运行时生成新行,但基本上是它的工作方式; 在我的例子中,必须添加一些大小参数或控件被隐藏。 所以我只需要设置控制行并将该行添加到网格中
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);
您实际上是在将网格绑定到数据源吗?请同时添加该代码。
RefreshdatagridTest
单步执行时是否被调用?@EdT-页面加载,您从下拉列表中选择一个选项。此时将调用RefreshdatagridTest。由于未调用我的“RowDataBound”方法,因此添加此语法以使其执行的正确方法是什么?看起来RowDefinition用于Windows.Control。这是一个网络项目。