2012-11-06 99 views
0

任何人都知道如何獲取一個Templatefield列的文本框,以將使用SqlDataSource類型化的數據反饋到sql數據庫中,該模板字段位於gridview中,並且使用buttonfield更新功能?我只是想知道是否有人有任何想法如何讓這個工作,因爲我還沒有找到任何這樣做的方式。使用gridview/templatefield更新SQL數據庫

請讓我知道你是否需要任何更多的信息來幫助你解決這個困境。

我能夠得到的信息反饋到SQL服務器,如果我啓用編輯和更改文本框中的信息以及同一行中的另一列的字段,但它不會更新,如果我只改變文本框中的信息無論是在編輯模式下還是僅點擊更新按鈕。

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
</head> 
<body> 
<center> 
<form id="form1" runat="server"> 
<div> 

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     DataKeyNames="Brdcst_Nbr" DataSourceID="SqlDataSource1" 
     EmptyDataText="There are no data records to display." Width="657px"> 
     <Columns> 
      <asp:BoundField DataField="Brdcst_Nbr" HeaderText="Brdcst_Nbr"  ReadOnly="True" 
       SortExpression="Brdcst_Nbr" /> 
      <asp:BoundField DataField="Item_Nbr" HeaderText="Item_Nbr" 
       SortExpression="Item_Nbr" ReadOnly="True" /> 
      <asp:CheckBoxField DataField="IsPicked" HeaderText="IsPicked" 
       SortExpression="IsPicked" /> 
      <asp:TemplateField SortExpression="Row" HeaderText="Row"> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Mode="twoway" AutoPostBack="true" CausesValidation="true" Text='<%# Bind("Row") %>'></asp:TextBox> 
       </EditItemTemplate> 
       <ItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Mode="twoway" AutoPostBack="true" CausesValidation="true" Text='<%# Bind("Row") %>'></asp:TextBox> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:ButtonField ButtonType="Button" CommandName="Update" Text="Update" /> 
      <asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" /> 
     </Columns> 
     <EditRowStyle HorizontalAlign="Center" VerticalAlign="Middle" /> 
     <RowStyle HorizontalAlign="Center" VerticalAlign="Middle" /> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConflictDetection="CompareAllValues" 
     ConnectionString="<%$ ConnectionStrings:ORDCConnectionString1 %>" 
     DeleteCommand="DELETE FROM [Test_New_Transpick] WHERE [Brdcst_Nbr] = @original_Brdcst_Nbr AND (([Item_Nbr] = @original_Item_Nbr) OR ([Item_Nbr] IS NULL AND @original_Item_Nbr IS NULL)) AND [IsPicked] = @original_IsPicked AND (([Row] = @original_Row) OR ([Row] IS NULL AND @original_Row IS NULL))" 
     InsertCommand="INSERT INTO [Test_New_Transpick] ([Brdcst_Nbr], [Item_Nbr], [IsPicked], [Row]) VALUES (@Brdcst_Nbr, @Item_Nbr, @IsPicked, @Row)" 
     UpdateCommand="UPDATE [Test_New_Transpick] SET [IsPicked] = @IsPicked, [Row] = @Row WHERE [Brdcst_Nbr] = @original_Brdcst_Nbr" 
     OldValuesParameterFormatString="original_{0}" 
     ProviderName="<%$ ConnectionStrings:ORDCConnectionString1.ProviderName %>" 
     SelectCommand="SELECT * FROM [Test_New_Transpick]" > 
     <DeleteParameters> 
      <asp:Parameter Name="original_Brdcst_Nbr" Type="String" /> 
      <asp:Parameter Name="original_Item_Nbr" Type="String" /> 
      <asp:Parameter Name="original_IsPicked" Type="Boolean" /> 
      <asp:Parameter Name="original_Row" Type="String" /> 
     </DeleteParameters> 
     <InsertParameters> 
      <asp:Parameter Name="Brdcst_Nbr" Type="String" /> 
      <asp:Parameter Name="Item_Nbr" Type="String" /> 
      <asp:Parameter Name="IsPicked" Type="Boolean" /> 
      <asp:Parameter Name="Row" Type="String" /> 
     </InsertParameters> 
     <UpdateParameters> 
      <asp:Parameter Name="Item_Nbr" Type="String" /> 
      <asp:Parameter Name="IsPicked" Type="Boolean" /> 
      <asp:Parameter Name="Row" Type="String" /> 
      <asp:Parameter Name="original_Brdcst_Nbr" Type="String" /> 
      <asp:Parameter Name="original_Item_Nbr" Type="String" /> 
      <asp:Parameter Name="original_IsPicked" Type="Boolean" /> 
      <asp:Parameter Name="original_Row" Type="String" /> 
     </UpdateParameters> 
    </asp:SqlDataSource> 

</div> 
</form> 
</center> 
</body> 
</html> 

回答

0

因此,將SQL數據庫的屬性從CompareAllValues更改爲OverwriteChanges可以解決此問題。現在,只需更改需要更新的行/列中的文本框而無需更改其他任何內容,就可以將更改寫回sql數據庫。