2010-11-06 17 views
0

为什么我只得到没有任何数据的空行?Asp.net GridView不显示任何数据,只是空行


编辑:

现在,我看到我的感谢Phil数据。 我只想知道两件小事:

  • 什么是DataKeyNames
  • 我将如何使用LINQ获取这些数据?

这里是我的代码:

<asp:GridView ID="gridProcesses" runat="server" AutoGenerateColumns="False" 
EnableModelValidation="True" Width="400px" DataKeyNames="ID"> 
    <Columns> 
     <asp:BoundField HeaderText="Name" /> 
     <asp:BoundField HeaderText="CPU" /> 
     <asp:BoundField HeaderText="RAM" /> 
     <asp:CommandField ButtonType="Button" SelectText="Kill" ShowSelectButton="True"> 
     <ItemStyle HorizontalAlign="Center" Width="30px" /> 
     </asp:CommandField> 
    </Columns> 
</asp:GridView> 

代码背后

public partial class OsControl : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    private List<string> getTestData() 
    { 
     List<string> tData = new List<string>(); 
     Random rand = new Random(); 
     for (int i = 0; i < 10; i++) 
     { 
      tData.Add("proc" + i + "_" + rand.Next(100) + "_" + rand.Next(100)); 
     } 

     return tData; 
    } 

    protected void btnLoad_Click(object sender, EventArgs e) 
    { 
     DataTable dtProcesses = new DataTable(); 
     dtProcesses.Columns.Add("Name", System.Type.GetType("System.String")); 
     dtProcesses.Columns.Add("CPU", System.Type.GetType("System.Int32")); 
     dtProcesses.Columns.Add("RAM", System.Type.GetType("System.Int32")); 
     dtProcesses.Columns.Add("ID", System.Type.GetType("System.Int32")); 

     int id = 0; 
     foreach (string line in getTestData()) 
     { 
      string[] items = line.Split('_'); 
      DataRow row = dtProcesses.NewRow(); 
      row["Name"] = items[0]; 
      row["CPU"] = int.Parse(items[1]); 
      row["RAM"] = int.Parse(items[1]); 
      row["ID"] = id++; 
      dtProcesses.Rows.Add(row); 
     } 

     gridProcesses.DataSource = dtProcesses; 
     gridProcesses.DataBind(); 
    } 
}- 

回答

3

确保您指定不只是标题文字也是数据字段:

<asp:BoundField HeaderText="Name" DataField="Name" /> 
+0

大,它的作品!我在原来的帖子中添加了一些更多的问题,如果你帮助我的话。 – Primoz 2010-11-06 14:13:22

+1

@Primoz - 顺便说一句,你可能会考虑将'System.Type.GetType(“System.String”)'改为'typeof(string)'。更清洁,并增加了编译时“打印错误”检查的好处,即使用硬编码字符串也不会得到这些好处。 – 2010-11-06 14:19:01

+0

您错过了''中的'DataField =“Name”'。它应该是''(它实际上是Phil Hunt的答案)。 – a1ex07 2010-11-06 14:20:32

1

回应更新的问题:

什么是DataKeyNames

此属性获取或设置项目的主键字段在GridView显示:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.datakeynames.aspx

我该如何获得使用LINQ这个数据?

如果使用LINQ,您可能会考虑使用LINQ to Entities(实体框架)。详细描述EF有点大一个答案的范围,但这应该让你开始使用数据绑定到EF:

http://learnentityframework.com/LearnEntityFramework/tutorials/asp-net-databinding-with-linq-to-entities/

+0

我添加了LINQ的功能。 – Primoz 2010-11-06 14:57:20

相关问题