2010-09-17 233 views
1

我是asp.net編程的新手,所以這一個讓我難倒了。我手動創建了一個數據集並將它的值設置爲GridView控件的數據源,然後調用Databind方法,但不刷新。我重新創建了一個我正在做的簡單版本,所以有人可以告訴我我做錯了什麼。我沒有包括主文件,因爲我沒有把它看作是有關的。ASP.Net GridView不刷新

代碼ASP頁

<%@ Page Language="vb" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="TestGridView._Default" %> 

更新價格請袖手旁觀。



<p> 
    <asp:GridView ID="GV1" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="VendorNumber" HeaderText="Vendor" /> 
     <asp:BoundField DataField="PartNumber" HeaderText="Part or Sku" /> 
     <asp:BoundField DataField="Message" HeaderText="Error Message" /> 
    </Columns> 
    </asp:GridView> 
</p> 
<br /> 
<br /> 
<% 
    If Not Page.IsPostBack Then 
     Response.Write(Me.UpdatePricing()) 

    End If 
%>  

代碼碼後面

Public Class _Default 
Inherits System.Web.UI.Page 

Public Function UpdatePricing() As String 
    Dim showerrors As Boolean = False 

    Dim Head As New PnAHead() 

    Dim ds As DataSet = Head.GetErrorDataset() 

    If (ds.Tables("Errors").Rows.Count > 0) Then 
     showerrors = True 
    End If 

    If showerrors Then 
     GV1.DataSource = ds 
     GV1.DataBind() 
    End If 

    Return "Sales Line Number has been updated." 
End Function 

末級

類CRE阿泰的數據集

Public Class PnAHead 

Public Function GetErrorDataset() As DataSet 
    Dim dstemp = New DataSet() 
    Dim tbl As DataTable = dstemp.Tables.Add("Errors") 
    Dim col As DataColumn = tbl.Columns.Add("VendorNumber", System.Type.GetType("System.String")) 
    col.MaxLength = 20 

    col = tbl.Columns.Add("PartNumber", System.Type.GetType("System.String")) 
    col.MaxLength = 50 

    col = tbl.Columns.Add("Message", System.Type.GetType("System.String")) 
    col.MaxLength = 500 

    Dim row As DataRow 

    row = tbl.NewRow() 

    row("VendorNumber") = "Vendor 1" 
    row("PartNumber") = "Part Number 1" 
    row("Message") = "Message for Part 1" 

    tbl.Rows.Add(row) 

    row = tbl.NewRow() 

    row("VendorNumber") = "Vendor 2" 
    row("PartNumber") = "Part Number 2" 
    row("Message") = "Message for Part 2" 

    tbl.Rows.Add(row) 

    Return dstemp 
End Function 

末級

回答

2

您需要添加呼叫才能將定價更新到Page_Load事件中。您也可以刪除Response.Write()。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not Page.IsPostBack Then 
     Me.UpdatePricing() 
    End If 
End Sub 

您可以通過在腳本標記包裝Page_Load事件中,像這樣在.aspx頁面做到這一點:

<script type="text/VB" runat="server"> 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not Page.IsPostBack Then 
     Me.UpdatePricing() 
    End If 
End Sub 

</script> 

或者,你可以在Page_Load事件添加到您的代碼背後,我認爲是可取的,因爲你已經有一個頁面後面的代碼。

+0

謝謝你是解決方案。我來自Windows編程的世界,我可以在任何時候更新datagridview,並且它始終工作。你知道爲什麼你必須從Page_Load事件中調用它來使其工作嗎? – Kevin 2010-09-17 12:31:09

0

你爲什麼不調試你的代碼和數據集的檢查有數據與否,美國可以通過增加你在哪裏設置行一個破發點做到這一點數據源,你可以進入數據集的屬性..你會發現一個放大鏡圖標..點擊它,一個彈出窗口將打開顯示檢索到的數據集。

+0

我已經驗證數據是在數據集中作爲我的疑難解答的一部分。我只是不明白爲什麼它不令人耳目一新。 – Kevin 2010-09-17 12:31:49