C# 如何:将数据集的每个表绑定到GridView上的页面

C# 如何:将数据集的每个表绑定到GridView上的页面,c#,asp.net,gridview,datatable,dataset,C#,Asp.net,Gridview,Datatable,Dataset,我找了又找,我想这应该是很直截了当的,但我想不出来。我有一个数据集(myDataSet),其中添加了几个表(myDataTable)。我还有一个GridView。我想设置GridView,以便GridView上的每个页面都绑定到数据集的每个表(即GridView的第1页=数据集。表[0],等等)。这些表都有相同的列,但行数不同 PageSize=表中的行数时,即使我已显式将PageButtonCount设置为3(此数据集中有3个表),按钮也会完全消失。我想有一种自动分页功能决定了不再需要更多的页

我找了又找,我想这应该是很直截了当的,但我想不出来。我有一个数据集(myDataSet),其中添加了几个表(myDataTable)。我还有一个GridView。我想设置GridView,以便GridView上的每个页面都绑定到数据集的每个表(即GridView的第1页=数据集。表[0],等等)。这些表都有相同的列,但行数不同

PageSize=表中的行数时,即使我已显式将PageButtonCount设置为3(此数据集中有3个表),按钮也会完全消失。我想有一种自动分页功能决定了不再需要更多的页面,但我无法确定如何使其工作

public partial class _Default : System.Web.UI.Page
{
    Users theUsers = new Users();
    static DataSet myDataSet = new DataSet();
    DataTable myDataTable = new DataTable();
    protected void Page_Load(object sender, EventArgs e)
    {
    protected bool runReport()
    {
        ltError.Visible = false;
        try
        {
            using (MySqlConnection dbConn = new MySqlConnection(ConfigurationManager.ConnectionStrings["AsteriskConn"].ConnectionString))
            {
                //sql query
                string sql = "SELECT calldate, src, dst, duration FROM cdr WHERE (src LIKE @ext AND dst > 9999)" +
                               "OR (dst LIKE @ext AND src > 9999) AND dst NOT LIKE '*%'";

                MySqlDataAdapter adapter = new MySqlDataAdapter();
                dbConn.Open();
                myDataSet.Tables.Clear();
                int j = ddlUsers.SelectedIndex;
                //loop through each user in the list and query the database for its cdr records with the sql query string
                foreach (int i in theUsers.groups[j].extensions)
                {
                    myDataTable = new DataTable();
                    adapter.SelectCommand = new MySqlCommand(sql, dbConn);
                    adapter.SelectCommand.Parameters.Add("@ext", MySqlDbType.VarChar, 80).Value = i;
                    adapter.Fill(myDataTable);
                    myDataTable.TableName = i.ToString();
                    myDataSet.Tables.Add(myDataTable);
                }
                gvReport.DataSource = myDataSet;
                gvReport.AllowPaging = true;
                gvReport.PageSize = myDataSet.Tables[0].Rows.Count;
                gvReport.PagerSettings.PageButtonCount = myDataSet.Tables.Count;
                gvReport.PagerSettings.Mode = PagerButtons.NumericFirstLast;
                gvReport.PagerSettings.Position = PagerPosition.Top;
                gvReport.PagerSettings.Visible = true;
                gvReport.DataBind();
                dbConn.Close();    
            }
        }
    }
}
protected void gvReport_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    gvReport.PageIndex = e.NewPageIndex;
    gvReport.DataSource = myDataSet.Tables[e.NewPageIndex];
    gvReport.DataBind();
}
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <asp:Panel ID="Panel1" runat="server" HorizontalAlign="Center">        
    <asp:GridView ID="gvReport" runat="server" OnPageIndexChanging="gvReport_PageIndexChanging"
            onrowdatabound="gvReport_RowDataBound" Visible="False" HorizontalAlign="Center" AllowPaging="true">
            <PagerSettings Position="Top" />
        </asp:GridView>
        <asp:Literal ID="ltError" runat="server" Visible="False"></asp:Literal>
    </asp:Panel>
</asp:Content>
public分部类\u默认值:System.Web.UI.Page
{
Users theUsers=新用户();
静态数据集myDataSet=新数据集();
DataTable myDataTable=新DataTable();
受保护的无效页面加载(对象发送方、事件参数e)
{
受保护的bool runReport()
{
ltError.Visible=错误;
尝试
{
使用(MySqlConnection dbConn=newmysqlconnection(ConfigurationManager.ConnectionStrings[“AsteriskConn”].ConnectionString))
{
//sql查询
string sql=“从cdr中选择calldate、src、dst、duration,其中(src-LIKE@ext和dst>9999)”+
“或(dst类似@ext和src>9999)和dst不类似'*%'”;
MySqlDataAdapter=新的MySqlDataAdapter();
dbConn.Open();
myDataSet.Tables.Clear();
int j=ddlUsers.SelectedIndex;
//循环遍历列表中的每个用户,并使用sql查询字符串查询数据库中的cdr记录
foreach(users.groups[j].extensions中的int i)
{
myDataTable=新数据表();
adapter.SelectCommand=newmysqlcommand(sql,dbConn);
adapter.SelectCommand.Parameters.Add(“@ext”,MySqlDbType.VarChar,80).Value=i;
adapter.Fill(myDataTable);
myDataTable.TableName=i.ToString();
myDataSet.Tables.Add(myDataTable);
}
gvReport.DataSource=myDataSet;
gvReport.AllowPaging=true;
gvReport.PageSize=myDataSet.Tables[0].Rows.Count;
gvReport.PagerSettings.PageButtonCount=myDataSet.Tables.Count;
gvReport.PagerSettings.Mode=PagerButtons.NumericFirstLast;
gvReport.PagerSettings.Position=PagerPosition.Top;
gvReport.PagerSettings.Visible=true;
gvReport.DataBind();
dbConn.Close();
}
}
}
}
受保护的无效gvReport\u PageIndexChanging(对象发送方,GridViewPageEventArgs e)
{
gvReport.PageIndex=e.NewPageIndex;
gvReport.DataSource=myDataSet.Tables[e.NewPageIndex];
gvReport.DataBind();
}

我认为,您最好动态添加页面索引按钮/链接按钮(或使用repeater显示页面索引按钮)

我认为如果您每次都绑定数据表,那么
分页对您来说不是一个好选择。设置
分页=false
并根据具有相同索引的表的数量添加链接和网格结尾,并使用
链接。单击
事件绑定数据。