2014-06-16 6 views
0

У меня есть следующие ASP GridView:Gridview не заселение с помощью DataBind

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> 
      <Columns> 
       <asp:BoundField DataField="TEXT" HeaderText="TEXT" SortExpression="TEXT" /> 
       <asp:BoundField DataField="session_id" HeaderText="session_id" SortExpression="session_id" /> 
       <asp:BoundField DataField="status" HeaderText="status" SortExpression="status" /> 
       <asp:BoundField DataField="command" HeaderText="command" SortExpression="command" /> 
       <asp:BoundField DataField="cpu_time" HeaderText="cpu_time" SortExpression="cpu_time" /> 
       <asp:BoundField DataField="total_elapsed_time" HeaderText="total_elapsed_time" SortExpression="total_elapsed_time" /> 
       <asp:BoundField DataField="dbname" HeaderText="dbname" ReadOnly="True" SortExpression="dbname" /> 
       <asp:BoundField DataField="user_running_query" HeaderText="user_running_query" SortExpression="user_running_query" /> 
      </Columns> 
     </asp:GridView> 

В коде позади меня:

protected void Page_Load(object sender, EventArgs e) 
     { 
      using (Repository.SqldbAllQueries()) 
      { 
       GridView1.DataBind(); 
      }  
     } 

И мой Repository класс содержит:

public static class Repository 
    { 
     public static SqlDataReader SqldbAllQueries() 
     { 
      SqlConnection sqlConnection1 = new SqlConnection("Data Source=sqldb;Initial Catalog=ReportServer;Integrated Security=True"); 
      SqlCommand cmd = new SqlCommand(); 
      SqlDataReader reader; 

      cmd.CommandText = @"SELECT sqltext.TEXT,req.session_id,req.status,req.command,req.cpu_time, 
           req.total_elapsed_time,DB_NAME(req.database_id) as dbname,s.login_name as user_running_query 
           FROM sys.dm_exec_requests req 
           CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext 
           INNER JOIN sys.dm_exec_sessions s ON req.session_id = s.session_id"; 

      cmd.CommandType = CommandType.Text; 
      cmd.Connection = sqlConnection1;    
      sqlConnection1.Open(); 
      reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
      return reader; 
     }   
    } 

Я пытаюсь захватить каждый текущий выполняемый запрос в sql-файле и выводить его на моей странице ASP в виде сетки с использованием данных nd, код строит и работает, однако gridview не отображается на странице. Я прошел через код, и я вижу, что reader содержит строки, но мне кажется, что здесь что-то не хватает, поскольку они не добавляются в gridview, может ли кто-нибудь увидеть проблему?

+0

перед 'DataBind' вам нужно установить свойство' DataSource' – Grundy

ответ

1

попробовать это,

в PageLoad

GridView1.DataSource = Repository.SqldbAllQueries(); 
GridView1.DataBind(); 
+0

GridView1 не существует в контексте репозитория – JsonStatham

+0

попробуйте обновленный код – KarthikManoharan

1

Попробуйте этот код. На самом деле, если вы вернете читателя, вы можете получить исключение.

protected void Page_Load(object sender, EventArgs e) 
{ 
    DBAccess db = new DBAccess(); 
    db.FetchData(BindData); 
} 

private void BindData(SqlDataReader reader) 
{ 
    DataGridView1.DataSource = reader; 
    DataGridView1.DataBind(); 
} 

А вот класс DBAccess (который похож на Repository класса)

public void FetchData(Action<SqlDataReader> bindMethod) 
{ 
    using (SqlConnection sqlConnection = new SqlConnection("ConnectionString")) 
    { 
     sqlConnection.Open(); 
     using (SqlCommand sqlCommand = new SqlCommand("Query", sqlConnection)) 
     { 
      bindMethod.Invoke(sqlCommand.ExecuteReader(CommandBehavior.CloseConnection)); 
     } 
    } 
} 

Надежда этот код помогает.

Смежные вопросы