как конвертировать Gridview в Datatable - PullRequest
1 голос
/ 27 ноября 2008

Я использую GridView в моем приложении для заполнения данных.

Есть ли какой-нибудь простой способ скопировать сетку в datatable?

На самом деле, в моем GridView один из элементов управления - это текстовое поле.
Таким образом, я могу редактировать этот элемент управления в любое время ... Мне нужно нажать кнопку, чтобы все изменения, которые я внес в GridView, скопировали в один элемент данных ...

Я сделал это, используя код,

dt = CType(Session("tempTable"), DataTable) 
i = 0 For Each rows As GridViewRow In Grid1.Rows 
   Dim txt As TextBox 
   txt = CType(rows.FindControl("txt"), TextBox) 
   dt.Rows(i)(1) = txt.Text
   i = i + 1 
Next

Здесь я прохожу через сетку с помощью цикла «для каждого».
Я беспокоюсь, влияет ли это на производительность?
Подскажите, пожалуйста, какой-нибудь другой простой способ скопировать GridView в таблицу данных

Ответы [ 3 ]

1 голос
/ 03 апреля 2009

как редактировать данные в gridview, используя набор данных и данные без источника данных

1 голос
/ 27 ноября 2008

Предпочтительным способом будет использование привязки данных. Если вам удастся заставить работать двунаправленную привязку данных, ваш DataTable обновится автоматически.

С точки зрения производительности, вы, вероятно, получите лучшую скорость из динамически генерируемой таблицы, в которой у ваших текстовых полей есть Id, который вы можете легко интерпретировать при обратной передаче и сохранить ваши изменения, не имея GridView для использования ViewState или восстановления его состояния и запуска все события.

0 голосов
/ 15 декабря 2008

HTML-страница выглядит,

                            <asp:GridView ID="Grid1" runat="server" AutoGenerateColumns="False" GridLines="None">
                                <Columns>
                                    <asp:TemplateField HeaderText="ID">
                                        <ItemTemplate>
                                            <asp:Label ID="lbl1" runat="server" Text='<%#Bind("ID") %>' CssClass="rowHeader"></asp:Label>
                                        </ItemTemplate>
                                        <FooterTemplate>
                                            <asp:TextBox ID="txt1" runat="server" Text='<%#Bind("ID") %>'></asp:TextBox>
                                        </FooterTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Description">
                                        <ItemTemplate>
                                            <asp:TextBox ID="txt" runat="server" Text='<%#Bind("Description") %>'></asp:TextBox>
                                        </ItemTemplate>
                                        <FooterTemplate>
                                            <asp:TextBox ID="txt2" runat="server" Text='<%#Bind("Description") %>'></asp:TextBox>
                                        </FooterTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Comments">
                                        <ItemTemplate>
                                            <asp:Label ID="Comments" runat="server" Text='<%#Bind("Comments") %>'></asp:Label>
                                        </ItemTemplate>
                                        <FooterTemplate>
                                            <asp:DropDownList ID="Drop1" runat="server">
                                                <asp:ListItem>v1</asp:ListItem>
                                                <asp:ListItem>v2</asp:ListItem>
                                            </asp:DropDownList>
                                        </FooterTemplate>
                                    </asp:TemplateField>
                                </Columns>
                            </asp:GridView>

                            <asp:Button ID="btnAdd" runat="server" Text="Add" />
                            <asp:Button ID="btnSave" runat="server" Text="Save" />

при загрузке страницы,

conn = Новый OleDb.OleDbConnection ("Поставщик = Microsoft.Jet.OLEDB.4.0; Источник данных = D: \ GDD_Work \ Employee.mdb")

    If Not Page.IsPostBack Then

        ViewState("intCount") = 0
        Session("blnFlag") = False

        Dim Cmd As New OleDb.OleDbDataAdapter("Select * from Emp", conn)
        Cmd.Fill(ds, "Employee")

        Grid1.DataSource = ds.Tables("Employee")
        Grid1.DataBind()

        Session("intOldCount") = ds.Tables("Employee").Rows.Count
        Session("tempTable") = ds.Tables("Employee")

при нажатии кнопки добавления,

If Session ("blnFlag") = False Тогда Session ("blnFlag") = True еще getFooter () Конец, если

    Grid1.FooterRow.Visible = True

при нажатии кнопки сохранения,

Dim intOldCount As Integer Dim intNewCount As Integer Dim dt As New DataTable Dim strQuery As String intOldCount = CType (Session ("intOldCount"), Integer) If Session ("blnFlag") = True Тогда

        getFooter()
        dt = CType(Session("tempTable"), DataTable)
        intNewCount = dt.Rows.Count

        If intOldCount = intNewCount Then
            Dim tx1 As TextBox
            Dim tx2 As TextBox
            Dim drp As DropDownList
            tx1 = CType(Grid1.FooterRow.FindControl("txt1"), TextBox)
            tx2 = CType(Grid1.FooterRow.FindControl("txt2"), TextBox)
            drp = CType(Grid1.FooterRow.FindControl("Drop1"), DropDownList)

            strQuery = "INSERT INTO Emp (ID,Description,Comments) values ('" + tx1.Text + "','" + tx2.Text + "','" + drp.SelectedValue + "')"
            Dim Cmd As New OleDb.OleDbCommand(strQuery, conn)
            conn.Open()
            Cmd.ExecuteNonQuery()
            conn.Close()

        Else
            For i = intOldCount To intNewCount - 1
                Dim strId As String
                Dim strDesc As String
                Dim strComm As String
                strId = dt.Rows(i)(0).ToString()
                strDesc = dt.Rows(i)(1).ToString()
                strComm = dt.Rows(i)(2).ToString()

                strQuery = "INSERT INTO Emp (ID,Description,Comments) values ('" + strId + "','" + strDesc + "','" + strComm + "')"
                Dim Cmd As New OleDb.OleDbCommand(strQuery, conn)
                conn.Open()
                Cmd.ExecuteNonQuery()
                conn.Close()
            Next
        End If

        For i = 0 To intOldCount - 1
            Dim strId As String
            Dim strDesc As String
            strId = dt.Rows(i)(0).ToString()
            strDesc = dt.Rows(i)(1).ToString()
            strQuery = "update Emp set Description = '" + strDesc + "' where ID = '" + strId + "'"

            Dim Cmd1 As New OleDb.OleDbCommand(strQuery, conn)
            conn.Open()
            Cmd1.ExecuteNonQuery()
            conn.Close()
        Next

        ds = New DataSet()
        Dim CmdData As New OleDb.OleDbDataAdapter("Select * from Emp", conn)
        CmdData.Fill(ds, "Employee")
        Grid1.DataSource = ds.Tables("Employee").DefaultView
        Grid1.DataBind()

        Session("blnFlag") = False
    Else
        dt = CType(Session("tempTable"), DataTable)
        i = 0
        For Each rows As GridViewRow In Grid1.Rows
            Dim txt As TextBox
            txt = CType(rows.FindControl("txt"), TextBox)
            dt.Rows(i)(1) = txt.Text
            i = i + 1
        Next
        Session("tempTable") = dt

        For i = 0 To intOldCount - 1
            Dim strId As String
            Dim strDesc As String
            strId = dt.Rows(i)(0).ToString()
            strDesc = dt.Rows(i)(1).ToString()
            strQuery = "update Emp set Description = '" + strDesc + "' where ID = '" + strId + "'"

            Dim Cmd1 As New OleDb.OleDbCommand(strQuery, conn)
            conn.Open()
            Cmd1.ExecuteNonQuery()
            conn.Close()
        Next

        Grid1.DataSource = dt.DefaultView
        Grid1.DataBind()

    End If

Я использую одну функцию, как,

Открытая функция getFooter () Dim TX1 As TextBox Dim TX2 As TextBox Dim drp As DropDownList tx1 = CType (Grid1.FooterRow.FindControl ("txt1"), TextBox) tx2 = CType (Grid1.FooterRow.FindControl ("txt2"), TextBox) drp = CType (Grid1.FooterRow.FindControl ("Drop1"), DropDownList)

    Dim dr As DataRow
    Dim dt As DataTable
    dt = CType(Session("tempTable"), DataTable)

    dr = dt.NewRow()
    dr("ID") = tx1.Text
    dr("Description") = tx2.Text
    dr("Comments") = drp.SelectedValue
    dt.Rows.Add(dr)

    i = 0
    For Each rows As GridViewRow In Grid1.Rows
        Dim txt As TextBox
        txt = CType(rows.FindControl("txt"), TextBox)
        dt.Rows(i)(1) = txt.Text
        i = i + 1
    Next

    Grid1.DataSource = dt.DefaultView
    Grid1.DataBind()

    Session("tempTable") = dt
End Function
...