Gridview上的行数

时间:2014-12-18 15:10:05

标签: c# asp.net gridview rows

(这是另一个问题,因为我的原帖,我在一个问题中提出了太多问题)

让我先说明一下。我对ASP编码几乎全新。我正在研究一个需要我使用ASP而不是PHP的小方案项目。我一直在寻找过去2天的解决方案,并尝试了很多东西,但似乎无法使用我的代码。我已经成为这个网站的一部分,所以我知道它是如何工作的。我不会在这里询问我是否已经尝试过一段时间自己这样做了。我在这里学到了大量有关SQL的信息,所以我希望对ASP也这样做。

问题:

返回的行数显示

当页面最初加载时,它只有一个TextBox1和一个Button。如果我没有在框中输入任何内容并点击按钮,它将加载我的GridView以及SQL Select中的所有数据行。当我按下按钮时,我想显示按钮旁边返回的行数。

GridView1:

<asp:TextBox ID="TextBox1" runat="server" Width="265px" Height="22px" CssClass="myBox"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Search Fields" CssClass="myButton" />
<asp:GridView ID="GridView1" OnPageIndexChanging="GridView1_PageIndexChanging" OnSorting="GridView1_Sorting" runat="server" AutoGenerateColumns="true" CellPadding="4" EnableModelValidation="True" EnableTheming="True" ForeColor="#333333" GridLines="None" Width="100%" style="margin-top: 0px; text-align: center;" AllowPaging="True" AllowSorting="True" >
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    <EditRowStyle BackColor="#999999" />
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
</asp:GridView>

Code Behind(DB名称和密码取出):

SqlConnection vid = new SqlConnection("Data Source=ENF;Initial Catalog=***Database Name***;Persist Security Info=True;User ID=sa;Password=***Password***");
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
    {
        GridView1.DataSource = GetData();
        GridView1.DataBind();
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    String str = "SELECT ab.NAME as [Customer] ,ISNULL(ab.TELEPHONE1,'') as [Phone #] ,ISNULL(pb.NAME,'') as [Product] ,ISNULL(aeb.NEW_PRODUCTVERSION,'') as [Version] ,CASE WHEN ab.STATUSCODE = 1 THEN 'Active' ELSE 'Inactive' END as [Status] ,ISNULL('Sal : ' + c.SALUTATION + ' / ','') + ISNULL('Title : ' + c.JOBTITLE + ' / ','') + ISNULL(a.PRIMARYCONTACTIDNAME,'') as [Primary Contact] ,ISNULL(c.TELEPHONE1,'') as [Contact Phone] FROM ACCOUNTBASE ab LEFT JOIN ACCOUNTEXTENSIONBASE aeb on ab.ACCOUNTID = aeb.ACCOUNTID LEFT JOIN PRODUCTBASE pb on aeb.NEW_PRIMARYPRODUCTID = pb.PRODUCTID LEFT JOIN ACCOUNT a on ab.ACCOUNTID = a.ACCOUNTID LEFT JOIN CONTACT c on a.PRIMARYCONTACTID = c.CONTACTID WHERE ((ab.NAME LIKE '%' + @search + '%') OR (aeb.NEW_PRODUCTVERSION LIKE '%' + @search + '%') OR (pb.NAME LIKE '%' + @search + '%') OR (a.PRIMARYCONTACTIDNAME LIKE '%' + @search + '%')) ORDER BY ab.NAME";
    SqlCommand xp = new SqlCommand(str, vid);
    xp.Parameters.Add("@search", SqlDbType.NVarChar).Value = TextBox1.Text;

    vid.Open();
    xp.ExecuteNonQuery();
    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand = xp;
    DataSet ds = new DataSet();
    da.Fill(ds, "Name");
    GridView1.DataSource = ds;
    GridView1.DataBind();

    vid.Close();
}

4 个答案:

答案 0 :(得分:1)

已返回的行数将存储在数据集的实例中。因此,通过计算,您将获得返回的行信息.DataSet包含行,列,主键,约束以及与其他DataTable对象的关系。我们可以使用其Rows.Count属性从数据集内的表中获取行数。

  ds.Tables[0].Rows.Count

答案 1 :(得分:1)

我现在在Linux上,我在RoR编码....我现在无法测试... 但是如果您需要知道GridView有多少项,请使用:

int qty = GridView1.Rows.Count;

这是你需要的吗?

一些示例...总是在MSDN中找到Microsoft开发者信息,那里有很多东西!

http://msdn.microsoft.com/library/system.web.ui.webcontrols.gridviewrowcollection.count%28v=vs.110%29.aspx

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rows%28v=vs.110%29.aspx

答案 2 :(得分:0)

获取总行数

int TotalRecord = dt.Rows.Count();

您可以在OnClick事件中设置所有内容但如果它不起作用,您可能必须在创建gridview时设置行数,然后我将创建一个标签并设置label = TotalRecord.text。制作label.visible=False并在按钮onclick事件中设置label.visible = true

答案 3 :(得分:0)

如果您不希望在用户点击按钮之前显示计数,则表示您正在回发帖子,而不是在页面的原始显示上。但是您在原始显示上填充gridview。因此,在回发时,您不再拥有可用的数据集,因此您不能只说textbox1.text = ds.tables(0).rows.count。你必须要么(a)重新运行查询,这似乎是浪费资源,或者(b)在初始加载的某个地方存储计数。

我建议(b)。您可以在初始加载时填充文本框并将其隐藏(textbox1.visible = false)。或者您可以创建一个隐藏字段来保持计数,或者将其置于视图状态,然后在需要时从那里检索它。

两种方式:

一:我为控件使用有意义的名称,而不是&#34; textbox1&#34;和&#34; gridview1&#34;。阅读

的程序要容易得多
if update_order.checked then ...

而不是

if checkbox1.checked then ... 

二:数据库调用中有一些不必要的步骤。你不需要xp.ExecuteNonQuery。 fill()将执行查询。您运行了两次:第一次丢弃结果,然后第二次处理它们。此外,您通常不需要在参数上指定数据类型。你可以写

xp.parameters.AddWithValue("@search",textbox1.text)