2013-02-08 54 views
1

我在將gridview中的字段值綁定到gridview內的文本框時遇到問題。我打算這樣做來編輯表格。綁定值到gridview裏面的文本框

我試圖用eval和綁定來做到這一點,但文本框不會顯示值,我絕對不知道爲什麼。

<asp:UpdatePanel runat="server"> 
    <ContentTemplate> 
     <asp:GridView ID="gvBS" runat="server" AutoGenerateColumns="false" DataKeyNames="ID" SkinID="gvWithoutWidth"> 
     <Columns> 
      <asp:CommandField ShowEditButton="true" EditImageUrl="~/Images/GridView/gv_edit.png" ButtonType="Image" 
       CancelImageUrl="~/Images/GridView/gv_cancel.png" UpdateImageUrl="~/Images/GridView/gv_update.png"/> 
      <asp:TemplateField HeaderText="Sollmonat" HeaderStyle-HorizontalAlign="Left"> 
       <EditItemTemplate> 
        <asp:TextBox ID="tbSollMonat" runat="server" Text='<%# Eval("SollMonat") %>'></asp:TextBox> 
        <asp:RequiredFieldValidator ID="rfvSollMonat" ValidationGroup="Update" runat="server" 
         ControlToValidate="tbSollMonat" ErrorMessage="Bitte Sollmonat (dd.mm.yyyy) angeben" 
         SetFocusOnError="true">*</asp:RequiredFieldValidator> 
        <asp:RegularExpressionValidator ID="revSollMonat" ValidationGroup="Update" runat="server" 
         ValidationExpression="^\d+$" ControlToValidate="tbSollMonat">*</asp:RegularExpressionValidator> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <%# Eval("SollMonat")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
    </ContentTemplate> 
</asp:UpdatePanel> 

問題是,它在ItemTemplate中工作正常,但不在EditItemTemplate-element內。真的不知道問題是什麼。

後面的代碼:

Sub gvBS_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs) Handles gvBS.RowEditing 
     gvBS.EditIndex = e.NewEditIndex 
    End Sub 

    Sub gvBS_RowCancelingEdit() Handles gvBS.RowCancelingEdit 
     Me.gvBS.EditIndex = -1 
     gvBS_DataBind() 
    End Sub 
+0

是否GridView的編輯模式,當用戶點擊鏈接? –

+0

是的,雖然我需要點擊兩次edit-img /按鈕。儘管如此,文本框仍然保持空白。 – OhSnap

回答

2

我假設GridView從未進入編輯模式,因爲你不處理RowEditing事件或者你沒有DataBind它,你已經設置gvBS.EditIndex = e.NewEditIndex;後。

<asp:GridView 
    OnRowEditing="gvBS_RowEditing" OnRowCancelingEdit="gvBS_RowCancelingEdit" 
    ID="gvBS" runat="server" AutoGenerateColumns="false" 
    DataKeyNames="ID" SkinID="gvWithoutWidth"> 

代碼隱藏(BindGrid是databinds網格方法):

protected void gvBS_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    gvBS.EditIndex = e.NewEditIndex; 
    BindGrid(); 
} 

protected void gvBS_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
{ 
    gvBS.EditIndex = -1; 
    BindGrid(); 
} 

你還應該記住,數據綁定只在第一次加載,而不是連續的回發時ViewState啓用(默認) 。因此,您可以查看頁面的IsPostBack屬性:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     BindGrid(); 
    } 
} 
+0

看看我最後的編輯。我確實製作了這些方法,但是......沒有用。 :) – OhSnap

+0

@ user854699:我用自定義的DataSource(手動填充的'DataTable')測試了您的網格...它按預期工作。你還沒有在RowEditing中綁定你的GridView。看我的代碼。 –

+0

Ohhhh我發現了錯誤。我沒有在rowedit事件中調用數據綁定方法。多謝你們。 – OhSnap

0

嘗試綁定的,而不是評估和演示在EditItemTemplate裏這樣

<asp:UpdatePanel runat="server"> 
<ContentTemplate> 
    <asp:GridView ID="gvBS" runat="server" AutoGenerateColumns="false" DataKeyNames="ID" SkinID="gvWithoutWidth"> 
    <Columns> 
     <asp:CommandField ShowEditButton="true" EditImageUrl="~/Images/GridView/gv_edit.png" ButtonType="Image" 
      CancelImageUrl="~/Images/GridView/gv_cancel.png" UpdateImageUrl="~/Images/GridView/gv_update.png"/> 
     <asp:TemplateField HeaderText="Sollmonat" HeaderStyle-HorizontalAlign="Left"> 
      <EditItemTemplate> 
       <asp:TextBox ID="tbSollMonat" runat="server" Text='<%# Bind("SollMonat") %>'></asp:TextBox> 
       <asp:RequiredFieldValidator ID="rfvSollMonat" ValidationGroup="Update" runat="server" 
        ControlToValidate="tbSollMonat" ErrorMessage="Bitte Sollmonat (dd.mm.yyyy) angeben" 
        SetFocusOnError="true">*</asp:RequiredFieldValidator> 
       <asp:RegularExpressionValidator ID="revSollMonat" ValidationGroup="Update" runat="server" 
        ValidationExpression="^\d+$" ControlToValidate="tbSollMonat">*</asp:RegularExpressionValidator> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <%# Eval("SollMonat")%> 
      </ItemTemplate> 
     </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
</ContentTemplate>