Asp.net GridView не показывает никаких данных, только пустые строки - PullRequest
0 голосов
/ 06 ноября 2010

Почему я получаю только пустые строки без каких-либо данных?


EDIT:

Теперь я вижу свои данные благодаря Филу. Я просто хочу знать еще две мелочи:

  • что такое 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();
    }
}-

Ответы [ 2 ]

3 голосов
/ 06 ноября 2010

Убедитесь, что вы указали не только текст заголовка, но и поле данных:

<asp:BoundField HeaderText="Name" DataField="Name" />
1 голос
/ 06 ноября 2010

Ответы на обновленные вопросы:

Что такое DataKeyNames?

Это свойство получает или задает поля первичного ключа для элементов, отображаемых в GridView:

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

Как мне получить эти данные, используя LINQ?

Если вы используете LINQ, вы, вероятно, думаете о LINQ to Entities (Entity Framework). Подробное описание EF является немного большим для объема ответа, но это должно помочь вам начать с привязки данных к EF:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...