在一个Web窗体中有:
   一个dropdownlist下拉条:ddlField,绑定可以选择的内容有“线路代码”和“线路名称”,他们的value分别为linecode,linename
   一个textbox :txtValue 
  还有一个可以点击的“查找”btnSearch控件
  在一个web窗体中两个dataGrid,一个主表grdMain ,一个从表grdDetail 。在grdMain中设置了一个模板列“线路名称”,点击模板列后grdDetail中显示相应的明细记录
   
   首次进入页面时加载数据,从表grdDetail是根据主表grdMain来过滤的,也就是在grdMaster中的行大于零时才会产生grdDetail,在grdDetail中显示的是grdMaster第一行记录的明细   可以在下拉单中选择“线路代码”或是“线路名称”,再在txtValue中输入查找过滤的条件,然后点击btnSearch查找,查找后两个数据表格显示相应的记录。
   出错的地方:刚进入页面的时候没有点击任何的模板列,只是直接在主表中翻到第2页,此时我的从表grdDetail中相应地显示出主表第二页第一条记录的明细。但是当我也让从表翻页的时候,主表自动返回到第一页!!这到底是为什么呀?该怎么改?能给点建议吗?   还有就是当我点击模板列从表显示相应的数据后,我再点击主表翻页,从表不会跟着显示主表当前页的第一行明细,而是保持上一次点击的模板列的明细!! 代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
   //首次加载数据

    if (Request["cp"]!=null)
      {
        currentPage =Convert.ToInt32(Request["cp"]);
      }
    if (!IsPostBack)
    {BindData();
    }
}
private void BindData()
{
            
ReportQuery reportQuery = new ReportQuery();
DataSet dataSet = null;

if (Session["Condition1"] == null)
{
dataSet = reportQuery.GetAllDeliveryBillMaster();
}
else
{
dataSet =reportQuery.GetDeliveryBillByConditionMaster(Session["Condition1"].ToString());
}
            grdMain.CurrentPageIndex = currentPage;
grdMain.DataSource = dataSet.Tables["tblMaster"].DefaultView;
grdMain.DataBind();
           
//如果主表记录条数 > 0,从表则显示第一条记录的明细
if(dataSet.Tables.Count > 0)
{
if(dataSet.Tables["tblMaster"].Rows.Count > 0)//或者主表点击了翻页
{
string lineCode = Request["LINECODE"];

ViewState["Condition2"] = string.Format("TBO.LINECODE like '%{0}%'", this.grdMain.Items[0].Cells[1].Text.ToString());
dataSet =reportQuery.GetDeliveryBillByConditionDetail(ViewState["Condition2"].ToString());

//当客户端发送请求时,从表显示所选线路的明细,且主表保持当前页
if(Request["LINECODE"]!=null)
{   
if(this.ddlField.SelectedItem.Text == "线路代码")
{
ViewState["Condition2"] = string.Format("TBO.{0} like '%{1}%'", ddlField.SelectedValue, txtValue.Text);
}
else
{
ViewState["Condition2"] = string.Format("TD.{0} like '%{1}%'", ddlField.SelectedValue, txtValue.Text);
}
//     ViewState["Condition2"] = string.Format("TBO.LINECODE like '%{0}%'", this.grdMain.SelectedItem.Cells[1].Text.ToString()); //所选行记录对应的线路代码
dataSet =reportQuery.GetDeliveryBillByConditionDetail(ViewState["Condition2"].ToString()); 
dataSet.Tables["tblDetail"].DefaultView.RowFilter = "LINECODE='" + lineCode + "'";
}
grdDetail.DataSource= dataSet.Tables["tblDetail"].DefaultView;
grdDetail.DataBind();
}
}
//当主表没记录时,从表也无记录
// else
// {
// grdDetail.DataSource=null;
// grdDetail.DataBind();
// }
}
private void btnSearch_Click(object sender, System.EventArgs e)
{
   if (txtValue.Text.Trim().Length == 0 && Session["Condition1"] != null)
   Session.Remove("Condition1");
   else
   {
   if(this.ddlField.SelectedItem.Text == "线路代码")
   {
   Session["Condition1"] = string.Format("TBO.{0} like '%{1}%'", ddlField.SelectedValue, txtValue.Text);
   }
   else
   Session["Condition1"] = string.Format("TD.{0} like '%{1}%'", ddlField.SelectedValue, txtValue.Text);
   }
grdMain.CurrentPageIndex = 0;
grdDetail.CurrentPageIndex = 0;
BindData();
        } private void grdMain_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{   
            grdMain.CurrentPageIndex = e.NewPageIndex;
currentPage = e.NewPageIndex;
BindData();
}     private void grdDetail_PageIndexChanged_1(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
grdDetail.CurrentPageIndex = e.NewPageIndex;
BindData();
}   }
}希望没有把大家吓倒!