2011-04-08 51 views
1

我有一個帶有GridView和SqlDataSource的頁面(它有一個MasterPage)。如果我在標記中設置了SelectCommand,則GridView顯示正常。但是,如果我動態生成相同的SelectCommand,那麼GridView是空的。我知道查詢被執行。 它可能是什麼原因? 謝謝。GridView爲空

<asp:SqlDataSource ID="UserSqlDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:BookList %>" DataSourceMode="DataSet" 
    ProviderName="<%$ ConnectionStrings:BookList.ProviderName %>" > 
</asp:SqlDataSource> 

     <asp:GridView ID="grdUsers" runat="server" AllowPaging="True" ShowHeader="false" ShowFooter="true" 
      AutoGenerateColumns="false" 
      Width="1480px" Height="100%" PageSize="50" DataSourceID="UserSqlDataSource" DataKeyNames="ID"> 
       <AlternatingRowStyle CssClass="alternatingrowstyle" /> 
       <Columns> 
        <asp:TemplateField HeaderText="User Name" SortExpression="Name"> 
         <ItemTemplate> 
          <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Last Name" SortExpression="LastName"> 
         <ItemTemplate> 
          <asp:Label ID="lblLastName" runat="server" Text='<%# Eval("LastName") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField>       
        <asp:TemplateField HeaderText="First Name" SortExpression="FirstName"> 
         <ItemTemplate> 
          <asp:Label ID="lblFirstName" runat="server" Text='<%# Eval("FirstName") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Email" SortExpression="Email"> 
         <ItemTemplate> 
          <asp:Label ID="lblEmail" runat="server" Text='<%# Eval("Email") %>'></asp:Label> 
         </ItemTemplate> 
        </asp:TemplateField>       

       </Columns> 

      </asp:GridView> 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     BindUsers(); 
    } 
} 

protected void BindUsers() 
{ 
    string strSelectClause = 
     @"SELECT ID, Name, FirstName, LastName, EMail, 
     FROM User WHERE Name NOT IN ('*All', 'Admin', 'TPS') "; 

    string strQuery = strSelectClause + GenerateWhereClause() + " ORDER BY Name;"; 

    SqlDataSource UserSqlDataSource = GetControl(this, "UserSqlDataSource") as SqlDataSource; 
    UserSqlDataSource.SelectCommand = strQuery; 
    grdUsers.DataBind(); 
} 

回答

1

它工作時,我從GridView的標記中刪除DataSourceID並添加 grdUsers.DataSource = UserSqlDataSource;在代碼後面。 我不知道爲什麼它不像以前那樣工作...

+1

如何標記爲正確答案或編輯問題 – 2011-04-09 02:06:48

+0

我不知道怎麼回事,不知道如何標記爲正確答案 – dpreznik 2011-04-11 12:29:17

+0

單擊答案旁邊的檢查(在答案的分數下)您應該始終將答案標記爲已接受(假設有答案)。 – 2011-04-11 20:53:33

1

用戶是保留關鍵字,你嘗試過:

SELECT ID, Name, FirstName, LastName, EMail, 
     FROM [User] WHERE Name NOT IN ('*All', 'Admin', 'TPS') "; 
+0

不,這不是問題所在。正如我所說的,如果在標記中設置了這個SelectCommand,GridView將被填充。我在QueryBrowser中成功地嘗試了查詢。無論如何,我試圖做出這個改變,但它沒有幫助。 – dpreznik 2011-04-08 14:32:15

1

the MSDN documentation for the SqlDataSource control

注意
默認情況下,如果其中一個參數爲空時,你執行Select命令,不會返回任何數據,也不會拋出異常。您可以通過將CancelSelectOnNullParameter屬性設置爲false來更改此行爲。

+0

謝謝Joel。不幸的是,這並沒有幫助,要麼: – dpreznik 2011-04-08 14:37:43

+0

大約4年後,這對我有幫助。我有一個存儲過程,它的URL可能沒有全部參數,顯然CancelSelectOnNullParameter屬性正在阻礙。 – pixelmeow 2015-01-12 19:42:33

0

也許你設置SelectCommand在頁面生命週期爲時已晚?在設置SelectCommand之後是否調用grdUsers.DataBind()?

+0

是的,它出現在我提供的代碼中,我不知道如果它是在Page_Load()中,它可能會遲到 – dpreznik 2011-04-08 15:10:47