我正在尝试动态添加gridview(让我们调用此gridview2)到通过.aspx页面添加的现有gridview(让我们调用此gridview1)。
我要做的是:根据显示在“gridview1”中的行的内容(更具体地说,在单元格1中显示的基于零的索引的发票编号),我将从列表中过滤数据并显示“gridview2”中的数据。
我在某个地方犯了一些可怕的错误,或者我的做法应该是根本错误的。
以下是.aspx页面中添加的gridview1的代码。
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="ClickingBtn_Click" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="Date Of Transaction"
HeaderText="Date Of Transaction" SortExpression="Date Of Transaction" />
<asp:BoundField DataField="Invoice Number" HeaderText="Invoice Number"
SortExpression="Invoice Number" />
<asp:BoundField DataField="totalAmount" HeaderText="totalAmount"
ReadOnly="True" SortExpression="totalAmount" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ComponentDBConnectionString %>"
SelectCommand="SelectUserPreviousHistory" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:Parameter DefaultValue="duran" Name="userName" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
这是获取数据,如下所示:here
然后我尝试添加另一个gridview,具体取决于每行中显示的唯一发票号码,代码如下:
foreach (GridViewRow gridviewrow in GridView1.Rows)
{
GridView gridView2 = new GridView();
gridView2.AutoGenerateColumns = true;
String x = gridviewrow.Cells[1].Text; //IT FETCHES THE INVOICE NUMBER FROM EACH ROW
softwareTitlesList = SoftwareListRetrieve(); //lIST OF ALL THE SOFTWARE TITLES ADDED TO LIST
ArrayList titles = new ArrayList();
foreach (SoftwareTitles softwareTitle in softwareTitlesList)
{
if (softwareTitle.InvoiceNumber.Contains(x))
titles.Add(softwareTitle.SoftwareTitle); //ADDING ONLY THOSE TITLES THAT MATCH THAT PARTICULAR INVOICE NUMBER
}
gridView2.DataSource = titles;
gridView2.DataBind();
}
但似乎没有发生任何事情。这有什么问题?
请帮帮我
BTW我正在使用asp.net/c# visualstudio 2010.我在我的项目中没有使用LINQ而且数据库是sql server 2005
感谢您的期待
答案 0 :(得分:1)
您的方法存在很多问题。
您确实在服务器端代码中创建了一个新的gridview,但您从未将gridview添加到页面或页面上的任何其他控件!它有效地告诉.NET创建一个gridview,将它绑定到数据但它没有告诉.NET“在哪里”在页面上呈现gridview。因此你没有看到任何东西。
动态控件 - 如果我在这里放肆,我很抱歉,但我认为你在ASP.NET中没有太多的动态控件。我全心全意的建议是尽量不要使用它们。动态创建的控件在其状态,回发事件方面带有巨大的包袱,实际上必须在每个帖子上添加回页面。简而言之,如果您在页面上动态添加按钮
按钮btn = new Button();
btn.Text =“hi”; Page.Controls.Add(BTN);
然后,您必须在页面的每个回发中触发此代码。如果在任何回发期间此代码未被触发,则当客户端看到该页面时,该按钮将丢失。
我可以建议一些方法来实现你想要做的事情,但是能够做到这一点我想知道