Что такое dataKeyName для вида сетки, связанной с массивом строк? - PullRequest
3 голосов
/ 02 февраля 2009

Может ли кто-нибудь дать мне короткий фрагмент, который, учитывая GridView, который изначально был связан с простым строковым массивом, и учитывая строку GridViewRow, вернет значение, которое было привязано к строке?

1 Ответ

4 голосов
/ 02 февраля 2009

Нельзя, единственное свойство System.String имеет длину, а DataKeyName ожидает свойство объекта, к которому привязывается. Чтобы ответить на ваш второй вопрос, вот пример получения строкового значения из GridViewRow.

В вашем файле ASPX:

<asp:GridView ID="GridView1" runat="server"
    OnRowDataBound="GridView1_RowDataBound" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField HeaderText="String Value">
            <ItemTemplate>
                <%# Container.DataItem %>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

В вашем коде:

protected void Page_Load(object sender, EventArgs e) {
    string[] arrayOfStrings = new string[] { "first", "second", "third" };
    GridView1.DataSource = arrayOfStrings;
    GridView1.DataBind();
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
    if (e.Row.RowType == DataControlRowType.DataRow) {
        // e.Row is of type GridViewRow
        // e.Row.DataItem contains the original value that was bound,
        // but it is of type object so you'll need to cast it to a string.
        string value = (string)e.Row.DataItem;
    }
}

Единственный разумный способ решения этой проблемы - создать класс-оболочку со свойствами. Или, если вы используете .NET 3.5, вы можете использовать LINQ для создания временного списка, который включает в себя только ваше значение как свойство класса. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *...

List<string> names = new List<string>(new string[] { "John", "Frank", "Bob" });

var bindableNames = from name in names
                    select new {Names=name};

GridView1.DataSource = bindableNames.ToList();

Тогда «Name» будет DataKeyName и BoundField DataField.

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