2014-03-12 189 views
-1

试图弄清楚为什么我有越来越GridView1数据绑定GridView控件绑定问题

HTML的一个问题:

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" 
     AutoGenerateColumns="False" DataSourceID="SqlDataSource1" 
     CellPadding="10" RowStyle-VerticalAlign="Top" 
     BackColor="White" BorderColor="Black" BorderWidth="1px" OnRowCreated="GridView1_RowDataBound" 
     Width="100%" AllowPaging="true" BorderStyle="Solid" PagerSettings-Position="TopAndBottom"> 
     <Columns> 

      <asp:TemplateField HeaderText="Last" > 
       <ItemStyle VerticalAlign="Top" /> 
       <ItemTemplate> 
        <%#Eval("Last")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="First" > 
       <ItemStyle VerticalAlign="Top" /> 
       <ItemTemplate> 
        <%#Eval("First")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Supervisor ID" > 
       <ItemStyle VerticalAlign="Top" /> 
       <ItemTemplate> 
        <%#Eval("supervisorId")%> 
       </ItemTemplate> 
      </asp:TemplateField> 

     </Columns> 
    </asp:GridView> 

代码隐藏:

 protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      // EdT: if there is no value in session["userId"], redirect user to login page 
      if ((HttpContext.Current.Session["userId"]) == null) 
      { 
       Response.Redirect("Default.aspx"); 
      } 
      else 
      { 
       userName = SqlHelperClass.GetUserName((int)HttpContext.Current.Session["userId"]); 
       timeCard = new TimeCard((int)HttpContext.Current.Session["userId"], GetCurrentPayPeriod()); 

       // EdT: Set value of literal 
       Literal1.Text = userName; 

       // EdT: Set default values for SelectParameters 
       string userId = HttpContext.Current.Session["userId"].ToString(); 
       string pped = Convert.ToString(GetCurrentPayPeriod()); 
       SqlDataSource1.SelectParameters["user"].DefaultValue = userId; 
       SqlDataSource1.SelectParameters["pped"].DefaultValue = pped; 
      } 
     } 
    } 

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     // set value of dropdown list in GridView Row to the value contained in the timecard DataTable 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      string dropDownListValue = CurrentTimeCard.TimeCardDataTable.Columns["projectName"].ToString(); 
      DropDownList dropDownList = (DropDownList)e.Row.FindControl("DropDownList1"); 
      dropDownList.DataSource = SqlDataSource2; 
      dropDownList.SelectedValue = dropDownListValue; 
     } 
    } 

SqlDataSource1标记:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:MinnsTimeDatabase %>" 
     SelectCommand="spGetTimeCard" SelectCommandType="StoredProcedure" > 
     <SelectParameters> 
      <asp:Parameter Name="user" Type="Int32" /> 
      <asp:Parameter DbType="Date" Name="pped" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 

任何想法赞赏

+0

SqlDataSource1的标记在哪里? – mason

+0

在你asp:gridview你引用sqldatasource1,但我没有看到你实际填充数据库中的数据。 iguess这不是问题,但在下面的函数'dropdownlist.datasource =“一个字符串?”'也许你的意思是'DataSourceID'或者你可以删除引号。 – RadioSpace

+0

已发布DatSource标记编辑原始帖子 – deadEddie

回答

0

你没有提到你的实际问题是什么,但我看到的一个问题是,当你使用DataSourceID属性(以及数据源控件)时,你不需要在GridView上调用DataBind()

所以我肯定会删除对GridView1.DataBind();的呼叫,即您的Page_Load函数的else块。由于您正在RowDataBound事件中进行处理,因此很有可能在页面生命周期中多次GridView数据绑定导致问题。

+0

删除并感谢,但没有去。问题在于GridView根本不是DataBinding,所以我在RowDataBound中的任何代码都没有运行。 – deadEddie

+0

@deadEddie啊,谢谢澄清。还有两点让我想起来:1.我注意到你正在处理RowCreated(尽管你称之为“RowDataBound”方法)。不一定是一个问题,只是想我会指出它2.也许你的一个参数是空的?尝试在您的SqlDataSource标记中将'CancelSelectOnNullParameter'设置为false。 – jadarnel27

+0

谢谢。我发现并纠正了RowCreated问题。将CancelSelectOnNullParameter设置为false。不知道这是否正确,但我在Page_Load事件中设置了默认值。 – deadEddie