在asp:DataGrid中拆分列

时间:2011-01-31 13:46:42

标签: asp.net datagrid split

希望非常简单。我的数据网格中有一个列,其中包含用于通知的电子邮件。它们用';'分隔。我想在每个'{1}}之后放一个';'这样网格就不会从页面上移开太远。我能够获得一个函数,允许我在创建之前看到每一行,但是当我试图检索值来编辑它时,它返回null。我将在星期五擦除它时尝试检索该功能,但想知道是否有人有关于如何执行此操作的任何链接或示例。

我有:

"<br>"

我想:

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

我知道我正在使用ItemCreated函数并尝试从DataGridItemEventArgs中检索值。现在正在处理这个功能。

更新

好的,所以我回到这个测试:

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

当我第一次点击断点时,.Text属性显示它是Notification,这正是它应该作为标题字段。在下一个中断和后续中断时,.Text属性为“”。现在,这个网格在Page_Load上是数据绑定的,但这会影响到这个吗?该值是否必须在DataGridItemEventArgs中才能创建该记录?我知道当我完成页面的ViewSource时它会在那里显示信息,但我不知道是否可以在绘制表格后设置它,但我对此表示怀疑。任何帮助将非常感激。谢谢。这是Page_Load和BindData函数,只是你需要它们。

的Page_Load

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

BindData

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

这是我在第一个Item行上得到的内容。

enter image description here

更新:修复

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

1 个答案:

答案 0 :(得分:1)

我相信你想要ItemDataBound事件。 ItemCreatedDataGrid的那一行创建的时间。控件就在那里,但就是这样。在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>
    }
}