2014-03-12 123 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