Как поместить кнопку в заголовок ASP.NET gridview?

Разработка через тестирование означает, что Вы прекращаете кодировать, когда все Ваши тесты передают.

, Если у Вас нет теста для свойства, тогда почему необходимо реализовать его? Если Вы не тестируете/определяете ожидаемое поведение в случае "недопустимого" присвоения, что должно сделать свойство?

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

Для создания этого тестирования легче я создал простой NUnit TestFixture, который обеспечивает точки расширения для установки/получения значения и берет списки допустимых и недопустимых значений и имеет единственный тест, чтобы проверить, работает ли свойство правильно. Тестирование единственного свойства могло быть похожим на это:

[TestFixture]
public class Test_MyObject_SomeProperty : PropertyTest<int>
{

    private MyObject obj = null;

    public override void SetUp() { obj = new MyObject(); }
    public override void TearDown() { obj = null; }

    public override int Get() { return obj.SomeProperty; }
    public override Set(int value) { obj.SomeProperty = value; }

    public override IEnumerable<int> SomeValidValues() { return new List() { 1,3,5,7 }; }
    public override IEnumerable<int> SomeInvalidValues() { return new List() { 2,4,6 }; }

}

Используя лямбды и атрибуты это могло бы даже быть записано более сжато. Я заключаю, что MBUnit имеет даже некоторую собственную поддержку подобных вещей. Точка, хотя то, что вышеупомянутый код получает намерение свойства.

P.S.: Вероятно, PropertyTest должен также иметь способ проверить, что другой свойства на объекте не изменились. Хм.. назад к исходной точке.

6
задан 13 September 2009 в 11:03
поделиться

2 ответа

Подход, который вам необходимо предпринять, - сделать этот желаемый столбец GridView полем шаблона. Когда вы используете поля шаблона, вы можете вставить любые элементы управления asp.net в каждый основной раздел элемента управления gridview (заголовок, элемент, нижний колонтитул и т. Д.). Я не тестировал это, но в основном это выглядит так:

        <asp:GridView ID="Gridview1" runat="server">
        <Columns>
            <asp:BoundField DataField="yourDbColumnName" HeaderText="id" />
            <asp:BoundField DataField="yourDbColumnName" HeaderText="name" />
            <asp:TemplateField>
                <HeaderTemplate>
                    <asp:Button runat="server" ID="btnFamily" CommandName="FamilyClicked" />
                </HeaderTemplate>
                <ItemTemplate>
                    <asp:Literal runat="server" ID="litFamily" Text='<%# EVAL("YourDbColumnValue") %>'></asp:Literal>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

Чтобы «захватить» событие нажатия кнопки и что-то с ним сделать, вам нужно использовать событие RowCommand GridView (вот отправная точка - снова непроверено):

    Protected Sub Gridview1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles Gridview1.RowCommand
    If e.CommandName = "FamilyClicked" Then
        ' they clicked by grid view header's asp:button control...
        Response.Write("TEST")
    End If
End Sub

Магия здесь заключается в назначении вашей кнопки свойству CommandName (в данном случае я установил для него значение «FamilyClicked», но это может быть все, что вы захотите).

Вот еще некоторые основы технологии поля шаблона, которую использует GridView - текст ссылки

Надеюсь, что это поможет.

12
ответ дан 9 December 2019 в 20:46
поделиться

, это фактически LinkButton. вы можете использовать CSS, чтобы придать им вид настоящей кнопки .

однако это вряд ли было бы элегантно, в то время как тенденция в дизайне на самом деле заключается в использовании ссылок вместо кнопок (посмотрите на любые популярное веб-приложение, которое вы любите, в том числе это)

0
ответ дан 9 December 2019 в 20:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: