如何从DataGrid获取值

时间:2014-03-24 17:29:05

标签: vb.net visual-studio visual-studio-2012 datagrid datatable

有人可以告诉我如何从数据网格中获取值我几乎尝试了所有内容:

.aspx页面中的代码:

<asp:GridView ID="GridViewInbox" runat="server">
    <Columns>
        <asp:TemplateField>

            <HeaderTemplate>
            </HeaderTemplate>

            <ItemTemplate>
            </ItemTemplate>

        </asp:TemplateField>
    </Columns>
</asp:GridView>

在aspx.vb页面后面的代码中,我试图获取这样的字符串值:

For Each row As GridViewRow In GridViewInbox.Rows
    If row.RowType = DataControlRowType.DataRow Then

    ... ??? ... Dim someString As String = row.Cells(1).Text not working

    End If
Next

带有问号的部分我需要弄清楚那里有什么以确保我从数据网格中获取字符串。在调用Cell之前还有一个额外的步骤,还是这就是我所需要的?如何从数据网格中获取值????

更新:

当我尝试这样做时:

GridViewInbox.Rows(1).Cells(1).ToString() 

我明白了:

System.Web.UI.WebControls.DataControlFieldCell

当我尝试这样做时:

GridViewInbox.Rows(1).Cells(1).Text

我什么都没有。

这就是我绑定数据网格的方式:

GridViewInbox.DataSource = dataTable    <- this here is System.Data.DataTable
GridViewInbox.DataBind()

所有数据显示。我在这里谈论的代码就在GridViewInbox.DataBind()

之后

更新:

.aspx page TemplateField binding

<asp:TemplateField SortExpression="From">
    <HeaderTemplate>
        <asp:LinkButton>From</asp:LinkButton>
    </HeaderTemplate>
<ItemTemplate>
    <asp:Label
              ID="btnOpenFrom"
              runat="server"
              CommandArgument='<%#DataBinder.Eval(Container.DataItem, "From")%>'>
    <%#DataBinder.Eval(Container.DataItem, "From")%>
</asp:Label>
</ItemTemplate>
<ItemStyle Width="20%" />
</asp:TemplateField>

这是我的完整代码也许这会有所帮助:

Public Function GetDataTable () As DataTable
    Dim dataTable As New DataTable("Some Name")
    dataTable.Columns.Add("ItemOne", GetType(String))
    dataTable.Rows.Add(...)  <- add rows data here, it matches the amount of columns
    Return dataTable
End Function

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    ...
    GridViewTest.DataSource = GetDataTable()
    GridViewInbox.DataBind()

    For Each row As GridViewRow In GridViewTest.Rows
        If row.RowType = DataControlRowType.DataRow Then
        ... <- trying to get at the value in a datagrid
        End If
    Next
    ... 
End Sub

3 个答案:

答案 0 :(得分:0)

GridView的Rows属性是GridViewRowCollection的一个对象。因此,要一次检索一行,您需要使用GridViewRow对象。 这就是原因,如果你直接使用GridViewInbox.Rows(1).Cells(1).ToString(),它将不会给你结果。

试试这段代码。很抱歉发布C#代码,因为我是C#开发人员,但我相信您将能够转换。

 foreach (GridViewRow row in GridViewInbox.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                Label1.Text += row.Cells[0].Text + "|" + row.Cells[1].Text + "|" + row.Cells[2].Text;
                Label1.Text += "<br/>";
            }

    }

答案 1 :(得分:0)

每次尝试都在你的内心:

dim x as String = ""
x = row.Cells.Item("ColumnName").Value

编辑: 您必须先将网格视图绑定到数据表,例如:

GridViewInbox.DataSource = dataTable

然后在您正在查看的单元格中应该有一个值。 ** dataTable必须填充您要查找的行。

答案 2 :(得分:0)

如果您在ItemTemplate中有控件,那么正确的方法是使用FindControl。

不确定为什么要为您的Label命名&#34; btnOpenFrom&#34;?但是使用控件的ID来查找它。

For Each row As GridViewRow In GridViewInbox.Rows
    If row.RowType = DataControlRowType.DataRow Then

        Dim mylabel As Label = row.FindControl("btnOpenFrom")
        Dim something as string = mylabel.Text

    End If
Next