Разделить столбец в asp: DataGrid - PullRequest
0 голосов
/ 31 января 2011

Надеюсь, все должно быть довольно просто.В моей таблице данных есть столбец, в котором есть электронные письма для уведомления.Они разделены знаком «;».Я хочу поставить "<br>" после каждого ';'чтобы сетка не расширялась слишком далеко от страницы.Мне удалось запустить функцию, которая позволяла мне видеть каждую строку до того, как она была создана, но когда я пытался получить значение для его редактирования, он возвращал ноль.Я собираюсь попытаться получить эту функцию, как я стер ее в пятницу, но мне было интересно, если у кого-то есть ссылки или примеры, как это сделать.

У меня есть:

-------------------------------------------------------------------------------
| Column1 | Column2 | Column3 |                    Notify                     |
-------------------------------------------------------------------------------
|  NULL   |  NULL   |  NULL   | email1@emailserver.com;email2@emailserver.com |
-------------------------------------------------------------------------------

Я хочу:

---------------------------------------------------------
| Column1 | Column2 | Column3 |          Notify         |
---------------------------------------------------------
|  NULL   |  NULL   |  NULL   | email1@emailserver.com; |
|         |         |         | email2@emailserver.com  |
---------------------------------------------------------

Я знаю, что я использовал функцию ItemCreated и пытался получить значения из DataGridItemEventArgs.Сейчас работаем над этой функцией.

Обновление

Хорошо, поэтому я вернулся к этому в качестве теста:

Private Sub ItemCreated(ByVal sender As Object, ByVal e As DataGridItemEventArgs) Handles dgTasks.ItemCreated
    If e.Item.Cells.Count > 1 Then
        Dim int As Integer = 0  'I put a breakpoint here to evalute the information
    End If
End Sub

Когда я впервые достигаю точки останова,Атрибут .Text показывает, что это Уведомление, которое в точности должно быть в качестве поля заголовка.На следующем и последующих перерывах атрибут .Text имеет значение "".Теперь эта сетка привязана к данным на Page_Load, но повлияет ли это на это?Разве значение не должно быть в DataGridItemEventArgs для этой записи, которая будет создана?Я знаю, что когда я делаю ViewSource страницы, когда я готов, там отображается информация, но я не знаю, можно ли это установить после рисования таблицы, но я сомневаюсь в этом.Любая помощь будет высоко ценится.Благодарю.Вот функции Page_Load и BindData, если они вам нужны.

Page_Load

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Page.IsPostBack Then
        'Do Nothing
    Else
        BindData("")
    End If
End Sub

BindData

Private Sub BindData(ByVal strSort As String)
    Dim tsDS As CustomDataSet = New CustomDataSet
    For Each dr As DataRow In tsDS.GetData("").Tables(0).Rows
        If dr.Item(2).ToString().StartsWith("Vacancy") Then
            dr.Delete()
        End If
    Next
    Dim dv As DataView = tsDS.GetData("").Tables(0).DefaultView

    If strSort.Length > 0 Then
       dv.Sort = strSort
    End If
    dgTasks.DataSource = dv
    dgTasks.DataBind()
End Sub

Вот что я получаю в первой строке элемента.

enter image description here

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

Protected Sub Item_DataBound(ByVal sender As Object, ByVal e As DataGridItemEventArgs) Handles dgTasks.ItemDataBound
    If e.Item.Cells.Count > 1 Then
        If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
            Dim notification As String = DirectCast(DirectCast(e.Item.DataItem, System.Data.DataRowView).Row, Utilities.CustomDS.Row).Notification
            e.Item.Cells(7).Text = "<a href=""mailto:" & notification & """>" & notification.Replace(";", ";<br>") & "</a>"
        End If
    End If
End Sub

1 Ответ

1 голос
/ 31 января 2011

Я считаю, что вы хотите событие ItemDataBound.ItemCreated - это когда создается строка DataGrid.Элементы управления есть, но это все.В событии ItemDataBound элементы управления привязываются к своим данным, и данные доступны для доступа.Если у вас есть логика, которая зависит от связанных данных, используйте событие ItemDataBound, которое запускается после события ItemCreated.

Вы связываете это в коде .aspx, назначая имя обработчика события дляСобытие, например

OnItemDataBound = "MyDataGrid_ItemDataBound"

В этом событии вы начинаете с изучения типа предмета, на который смотрите.

Затем вы находите ячейку и элемент управления.И наконец, вы устанавливаете свойство Text для вашего измененного текста.

Вот пример:

protected void MyDataGrid_ItemDataBound(object sender, DataGridItemEventArgs e)

{
    if (e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
    {
       e.Item.Cells[3].Text == <assign your altered text here>
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...