一DATAGRID控件,设置了TemplateColumn,EditItemColum为一Textbox控件。当我点击更新按纽时,我在Textbox输入的值不能被更新,单步调试时发现值总是更新前的值,如原来为60,我在文本框中输入80,点更新,结果还是60,请帮忙。        Dim CusNum As String = Session("CompanyCode").ToString
        Dim ProdNum As String = e.Item.Cells(0).Text.Trim
        Dim ExfDate As String = e.Item.Cells(4).Text.Trim
        Dim Adjust As TextBox
        Adjust = CType(DataGrid1.Items(e.Item.ItemIndex).Cells(3).FindControl("EditAdjust"), TextBox)'这里为获取文本框中的值
        Dim Revisedqty As Decimal = CType(Adjust.Text.Trim, Decimal)
        Dim SpecLeadTm As Integer = CType(CType(e.Item.Cells(6).FindControl("EditTm"), TextBox).Text.Trim, Integer)
        If DataUnit.Aquamate_updateResived(CusNum, ProdNum, ExfDate, Revisedqty, SpecLeadTm) = True Then'这是一个更新的存储过程。
            DataGrid1.EditItemIndex = -1
            DataBinds()
        Else
            Throw New Exception("failed")
        End If

解决方案 »

  1.   

    我完了,怎么办呢。<asp:datagrid id="DataGrid1" runat="server" OnEditCommand="EditCommand" OnCancelCommand="CancelCommand"
    Font-Size="8pt" Font-Names="Arial" OnItemDataBound="Data_ItemDataBound" BorderColor="Blue" BorderWidth="1px" AlternatingItemStyle-BackColor="AliceBlue"
    SelectedItemStyle-BackColor="LightGrey" AutoGenerateColumns="False">
    <SelectedItemStyle BackColor="LightGray"></SelectedItemStyle>
    <AlternatingItemStyle BackColor="AliceBlue"></AlternatingItemStyle>
    <HeaderStyle Font-Bold="True" HorizontalAlign="Center" BackColor="Info"></HeaderStyle>
    <Columns>
    <asp:BoundColumn DataField="ProdNum" ReadOnly="True" HeaderText="Product#">
    <HeaderStyle Width="100px"></HeaderStyle>
    </asp:BoundColumn>
    <asp:BoundColumn DataField="ProdDscrp" ReadOnly="True" HeaderText="Item Desc">
    <HeaderStyle Width="200px"></HeaderStyle>
    <ItemStyle Font-Size="7pt" Width="200px"></ItemStyle>
    </asp:BoundColumn>
    <asp:HyperLinkColumn DataNavigateUrlField="CustNum" DataNavigateUrlFormatString="javascript:varwin=window.open('Historyform.aspx?CustNum={0}',null,'width=500,height=300');window.Close();"
    DataTextField="Frcst_qty" HeaderText="Forecast QTY Per (History/Month)">
    <HeaderStyle HorizontalAlign="Center" Width="60px"></HeaderStyle>
    </asp:HyperLinkColumn>
    <asp:TemplateColumn HeaderText="Adjusted Forecast QTY">
    <HeaderStyle Width="80px"></HeaderStyle>
    <ItemTemplate>
    <asp:Label id="Adjust" Runat=server text='<%# DataBinder.Eval(Container.DataItem,"Revised_qty") %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox Runat=server id="EditAdjust" CssClass=txtboxcss Text='<%# DataBinder.Eval(Container.DataItem,"Revised_qty") %>' Width=80 />
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:BoundColumn DataField="ExFDate" ReadOnly="True" HeaderText="ETD Date">
    <HeaderStyle Width="60px"></HeaderStyle>
    </asp:BoundColumn>
    <asp:BoundColumn DataField="lead_tm" ReadOnly="True" HeaderText="Production">
    <HeaderStyle Width="50px"></HeaderStyle>
    </asp:BoundColumn>
    <asp:TemplateColumn HeaderText="Special Event" runat="server">
    <HeaderStyle Width="80px"></HeaderStyle>
    <ItemTemplate>
    <asp:Label ID="Label2" Runat=server text='<%# DataBinder.Eval(Container.DataItem,"Spec_lead_tm") %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:textbox runat="server" width="80px" CssClass=txtboxcss id="EditTm" Text='<%# DataBinder.Eval(Container.DataItem, "Spec_lead_tm") %>' /><br>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:BoundColumn DataField="RelativeTime" ReadOnly="True" HeaderText="Production"></asp:BoundColumn>
    <asp:BoundColumn DataField="LatestSpecial" ReadOnly="True" HeaderText="Special Event" ItemStyle-Width="100"
    HeaderStyle-Width="100"></asp:BoundColumn>
    <asp:TemplateColumn HeaderText="PO Status">
    <HeaderStyle Width="50px"></HeaderStyle>
    <ItemStyle HorizontalAlign="Center"></ItemStyle>
    <ItemTemplate>
    <asp:CheckBox id=Postatus Checked='<%# DataBinder.Eval(Container.DataItem,"PO_status") %>' Enabled="False" Runat="server">
    </asp:CheckBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:BoundColumn DataField="Comment" ReadOnly="True" HeaderText="Comment">
    <HeaderStyle Width="120px"></HeaderStyle>
    </asp:BoundColumn>
    <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="&lt;img src=ok.gif border=0 align=absmiddle alt='Save changes'&gt;"
    CancelText="&lt;img src=cancel.gif border=0 align=absmiddle alt='Cancel editing'&gt;" EditText="&lt;img src=edit.gif border=0 align=absmiddle alt='Edit this item'&gt;">
    <ItemStyle HorizontalAlign="Center" BackColor="#CCCCFF"></ItemStyle>
    </asp:EditCommandColumn>
    </Columns>
    </asp:datagrid>
      

  2.   

    Public Sub UpdateCommand(ByVal Sender As Object, ByVal e As DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand
            Dim CusNum As String = Session("CompanyCode").ToString
            Dim ProdNum As String = e.Item.Cells(0).Text.Trim
            Dim ExfDate As String = e.Item.Cells(4).Text.Trim
            Dim Adjust As TextBox
            Adjust = CType(DataGrid1.Items(e.Item.ItemIndex).Cells(3).FindControl("EditAdjust"), TextBox)
            Dim Revisedqty As Decimal = CType(Adjust.Text.Trim, Decimal)
            Dim SpecLeadTm As Integer = CType(CType(e.Item.Cells(6).FindControl("EditTm"), TextBox).Text.Trim, Integer)
            If DataUnit.Aquamate_updateResived(CusNum, ProdNum, ExfDate, Revisedqty, SpecLeadTm) = True Then
                DataGrid1.EditItemIndex = -1
                DataBinds()
            Else
                Throw New Exception("failed")
            End If
        End Sub
      

  3.   

    樓主﹐你看一下Page_Load(頁面加載過程)是有對DataGrid填充值﹐原因﹕VB.NET和C#.neT中﹐第一步執行的是Page_Load加載頁面﹔
    第二步執行Page_Init初始化頁面(不記得是不是)﹔
    第三步才執行你操作的事件﹔在VB。net中你不大懂﹐在C#。net中﹐對DataGrid填充值﹐如下
    //IsPostBack,是判頁面有沒有加載過﹐如有加載過就不再執行這一個if中的語句了
    if(!IsPostBack)   
    {
            ....
            DataGrid.DataSourse=MyDataSet.Table["Table1"]
            .......
    }
    不知道在VB。NET中是用哪個﹐
    希望對你有所啟發﹗
      

  4.   

    嗯就是chenxianping所说的,应该在页面初始加载的时候来设置相应的datagrid显示,在数据交互的时候就不再设置相应的datagrid显示
      

  5.   

    对对对,这个忘啦,晕了我一天了。当我点击Update时,又Databind()了一次,倒置Txtbox里面又是Database里面的数据了。谢谢谢谢谢谢。
      

  6.   

    真是教训。在VB.NET中
    if not IspostBack then
       DataBinds()
    End if
    在点击Update按纽时,需要PostPack一次到Server端执行。过程
    Initialization->LoadViewState->LoadPostBackData->Load->RaisePostBackEvent->SaveViewState->Render
    在load时,我Datainds了,没有判断。导致此时TxtBox中的数据己经变了。于是就出现此时的现象。谢谢。经验教训。下次小心。