主頁 > 移動端開發 > 如何從SQL資料庫編輯網格視圖中顯示的資料

如何從SQL資料庫編輯網格視圖中顯示的資料

2021-11-28 06:41:04 移動端開發

我使用 Grid View 創建了一個搜索功能,該程式讀取用戶輸入并根據它回傳與資料庫匹配的資料,但是它回傳整行,其中包括我不想顯示的 2 個 ID 列. 聽起來很簡單,但我似乎找不到任何關于如何做到這一點的教程。

另外,第二列IdCargo(IdProfession,英文),我想翻譯這些資料,例如,如果應該出現特定的 ID,我想改為顯示所述員工的職業。我還想顯示帶有“Cargo”名稱而不是“IdCargo”的列,我想顯示“Carga Horaria”而不是“CargaHoraria”。

如果有人知道使用 GridViews 和 SQL 的任何型別的指南或教程,那對未來的研究也將非常有幫助。

如何從 SQL 資料庫編輯網格視圖中顯示的資料

uj5u.com熱心網友回復:

偉大的。好的,我們不必擔心搜索部分 - 我假設您輸入一些搜索,帶引數,結果是一個資料表。

現在,我強烈建議您考慮使用串列視圖代替網格視圖。

至于控制哪些列?好吧,您可以對每一列進行模板化。(這就是為什么我建議使用串列視圖 - 它的標記較少)。

但是,我沒有太多的列——所以 GV 是“好的”,但如果你想要更多的列、更多的自定義布局——那么 LV 的標記就會更少。

LV 的另一個非常大的優勢是,您可以讓它為您撰寫標記。

不管怎樣,好吧,這就是我們的GV。

非常重要:我們為每一行(“ID”)都有一個 PK 主鍵。我們當然不想顯示或顯示該 PK ID,但眾所周知,PK 是任何資料系統的命脈。所以,GV 中有一個非常酷的功能——叫做 DataKeys。它允許您使用/擁有/播放 PK 行 id,但您永遠不必在 GV 中公開或顯示它。(所以不僅從 UI 的角度來看很好,從安全的角度來看也非常好)。

所以,假設我們有這個 GV 布局:

    <div style="width:40%;padding:25px">

              <style> .borderhide input {border:none}</style>


        <asp:GridView ID="GVPeople" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="ID" cssclass="table borderhide">
            <Columns>
                <asp:TemplateField HeaderText="First Name">
                    <ItemTemplate>
                        <asp:TextBox ID="FirstName" runat="server" Text='<%# Eval("FirstName") %>' ></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="Last Name">
                    <ItemTemplate>
                        <asp:TextBox ID="LastName" runat="server" Text='<%# Eval("LastName") %>' ></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="City">
                    <ItemTemplate>
                        <asp:TextBox ID="City" runat="server" Text='<%# Eval("City") %>' ></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="Active" ItemStyle-HorizontalAlign="Center">
                    <ItemTemplate>
                        <asp:CheckBox ID="Active" runat="server"
                            Checked='<%# Eval("Active") %>'/> 
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="Hotel ID">
                    <ItemTemplate>
                        <asp:TextBox ID="Hotel_ID" runat="server" Text='<%# Eval("Hotel_ID") %>' ></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>

            </Columns>
        </asp:GridView>

我們會感覺到這個帶有資料的 GV - 存在更多的列 - 但我們不在乎。

所以,到目前為止我的代碼是這樣的:

Dim rstData As New DataTable
Dim rstHotels As New DataTable  ' for combo box
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        LoadGrid()
        ViewState("rstData") = rstData
    Else
        rstData = ViewState("rstData")
    End If

End Sub


Sub LoadGrid()

    rstHotels = MyRst("SELECT ID, HotelName from tblHotels ORDER BY HotelName")
    rstData = MyRst("SELECT * from People Order by FirstName")

    GVPeople.DataSource = rstData
    GVPeople.DataBind()


End Sub

所以現在我們有這個:

如何從 SQL 資料庫編輯網格視圖中顯示的資料

好的,所以您的問題的一部分是我們顯然不想顯示 Hotel_id,而是想將其轉換為描述。當然,如果我們要允許編輯,那么讓我們將 Hotel_ID 轉換為組合框(下拉串列)。和 Near most/all 組合框一樣,我們將存盤酒店的 PK id,但當然顯示酒店名稱以方便使用。

因此,代替hotel_id,我們將標記更改為:

<asp:TemplateField HeaderText="Hotel ID">
    <ItemTemplate>
    <asp:DropDownList ID="cboHotel" runat="server"
        DataTextField="HotelName" 
        DataValueField="ID">
    </asp:DropDownList>
    </ItemTemplate>
</asp:TemplateField>

好的,現在我們必須填寫 設定組合框。我們有兩個任務:

用資料源填充組合框

將組合框設定為每個 gv 行的 CURRENT 選擇。

為此,我們將使用 GV 行資料系結事件。

因此,我們填寫組合的代碼將如下所示:

So we have this code:

Protected Sub GVPeople_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GVPeople.RowDataBound

    If e.Row.RowType = DataControlRowType.DataRow Then

        ' get full row of data bind - all columns
        Dim gData As DataRowView = e.Row.DataItem ' NOT A GRID VIEW ROW!!!!!

        ' get combo box
        Dim cboHotels As DropDownList = e.Row.FindControl("cboHotel")
        ' setup cbo data source
        cboHotels.DataSource = rstHotels
        cboHotels.DataBind()
        cboHotels.Items.Insert(0, New ListItem("", ""))   ' add blank (no choice)

        If IsDBNull(gData("Hotel_id")) = False Then
            cboHotels.SelectedValue = gData("Hotel_ID").ToString
        End If

    End If

End Sub

so, now our results are this:

如何從 SQL 資料庫編輯網格視圖中顯示的資料

Ok, so that takes care of one of your questions/issues.

Next up is to edit - and this is REALLY cool, and REALLY easy.

Ok, if you look close, I "hide" the borders for the text boxes, but you find now that you can tab around quite much like excel. And a nice free-bee is that when text boxes have focus, they show!!

So lets drop in our button below the grid to save edits. It looks like this when I tab around:

如何從 SQL 資料庫編輯網格視圖中顯示的資料

Quite much like magic - you can now tab around - almost like Excel. And you can choose combo box value.

And in above, we dropped in a simple button below the GV like this:

        </asp:GridView>
        <asp:Button ID="cmdSave" runat="server" Text="Save Edits" CssClass="btn" />

Ok, so now the save data button.

We will write one helper routine. There is a BOATLOAD of reasons to split this code into two routines. So the first routine?

It will send the grid values BACK to our table. If you look close, I persisted the GV table data source as rstData.

So this routine sends grid back to table.

Sub GridToTable()

    ' pull GV rows back to table.
    For Each gRow As GridViewRow In GVPeople.Rows

        ' Get database PK value
        Dim PK As Integer = GVPeople.DataKeys(gRow.RowIndex).Item("ID")

        Dim OneDataRow As DataRow = rstData.Select("id = " & PK)(0)

        OneDataRow.Item("FirstName") = CType(gRow.FindControl("FirstName"), TextBox).Text
        OneDataRow.Item("LastName") = CType(gRow.FindControl("LastName"), TextBox).Text
        OneDataRow.Item("City") = CType(gRow.FindControl("City"), TextBox).Text
        OneDataRow.Item("Active") = CType(gRow.FindControl("Active"), CheckBox).Checked

        ' combo box
        Dim cboHotel As DropDownList = gRow.FindControl("cboHotel")
        If cboHotel.Text = "" Then
            OneDataRow("Hotel_ID") = DBNull.Value
        Else
            OneDataRow("Hotel_ID") = cboHotel.SelectedItem.Value
        End If

    Next

End Sub

Ok, so now all we have to do is send the rstData table (and get this: this will handle NEW rows, or edits!!!!).

so, now our save button code looks like this:

Protected Sub cmdSave_Click(sender As Object, e As EventArgs) Handles cmdSave.Click

    GridToTable()

    Using conn As New SqlConnection(My.Settings.TEST4)
        Using cmdSQL As New SqlCommand("SELECT * from People where ID = 0", conn)

            Dim da As New SqlDataAdapter(cmdSQL)
            Dim daC As New SqlCommandBuilder(da)

            conn.Open()
            da.Update(rstData)

        End Using
    End Using

End Sub

So note how we send the WHOLE grid back to the database, and all changes in ONE shot.

Last but not least:

I used a helper routine to get a data table (became REAL fast typing that kind of code over and over, so I have this and I made it global to the whole application:

Public Function MyRst(strSQL As String) As DataTable

    Dim rstData As New DataTable
    Using conn As New SqlConnection(My.Settings.TEST4)
        Using cmdSQL As New SqlCommand(strSQL, conn)
            conn.Open()
            rstData.Load(cmdSQL.ExecuteReader)
            rstData.TableName = strSQL
        End Using
    End Using

    Return rstData
End Function

NOTE very carefull, I also STUFF the sql statement into the rst.Table name. Table name not really used, but now since I persisted the SQL for that table?

Then in fact this line

    Using conn As New SqlConnection(My.Settings.TEST4)
        Using cmdSQL As New SqlCommand("SELECT * from People where ID = 0", conn)

becomes:

    Using conn As New SqlConnection(My.Settings.TEST4)
        Using cmdSQL As New SqlCommand(rstData.TableName, conn)

這意味著,如果/當我說要在頁面上編輯子母版或多個資料表時?我使用一個資料集(一組表),并且有一個程式可以一次性將所有表和所有編輯發送回資料庫。我們沒有更多的資料表要編輯,但這解釋了為什么我將 SQL 陳述句推入資料表“表”名稱中,因為如您所見,我們甚至不必重新鍵入使用的sql。

注意僅供參考:我使用的那個 sql 陳述句:

SELECT * from People WHERE ID = 0

不是 o 型。我用它來允許 sqlCommandBuilder 為我完成連接和創建 sql 插入和更新蒸汽的所有骯臟作業。

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/367849.html

標籤:网站 网络

上一篇:限速時Nginx回傳CORS錯誤而不是429

下一篇:WebApi忽略路由屬性

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more