2012-05-12 61 views
2

我正在使用SQL Server 2008 R2和VS2010 C#ASP.NET 4是否有一个开关将SQL Server表的字段的默认值作为FormView/DetailsView的TextBox的默认值?

FormView和DetailsView在插入模式下为空文本框。

我希望这些TextBoxes能够反映SQL Server上相应列的默认值的默认值。

有没有简单的方法来做到这一点?


编辑:(例子)

问题:

enter image description here

表:

CREATE TABLE [dbo].[SampleTable](
    [PKColumn1] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, 
    [IntColumn2] [int] NOT NULL DEFAULT (12), 
    [nvarcharColumn3] [nvarchar](50) NOT NULL DEFAULT (N'bla bla'), 
    [IntColumn4NoDefault] [int] NULL) 

的ASPX标记:

<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px" 
      AutoGenerateRows="False" DataKeyNames="PKColumn1" DataSourceID="SqlDataSource1" 
      DefaultMode="Insert"> 
      <Fields> 
       <asp:BoundField DataField="PKColumn1" HeaderText="PKColumn1" InsertVisible="False" ReadOnly="True" SortExpression="PKColumn1" /> 
       <asp:BoundField DataField="IntColumn2" HeaderText="IntColumn2" SortExpression="IntColumn2" /> 
       <asp:BoundField DataField="nvarcharColumn3" HeaderText="nvarcharColumn3" SortExpression="nvarcharColumn3" /> 
       <asp:BoundField DataField="IntColumn4NoDefault" 
        HeaderText="IntColumn4NoDefault" SortExpression="IntColumn4NoDefault" /> 
       <asp:CommandField ShowInsertButton="True" /> 
      </Fields> 
     </asp:DetailsView> 

     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:dbConnectionString %>" 
      InsertCommand="INSERT INTO [SampleTable] ([IntColumn2], [nvarcharColumn3], [IntColumn4NoDefault]) VALUES (@IntColumn2, @nvarcharColumn3, @IntColumn4NoDefault)" 
      SelectCommand="SELECT * FROM [SampleTable]"> 
      <InsertParameters> 
       <asp:Parameter Name="IntColumn2" Type="Int32" /> 
       <asp:Parameter Name="nvarcharColumn3" Type="String" /> 
       <asp:Parameter Name="IntColumn4NoDefault" Type="Int32" /> 
      </InsertParameters> 
     </asp:SqlDataSource> 

没有任何C#代码背后。

+0

它驻留在information_schema表中。我忘了哪一个 –

回答

1

是的,有...

select c.name, definition 
from sys.default_constraints dc 
join sys.columns c 
on  c.object_id = dc.parent_object_id 
     and c.column_id = dc.parent_column_id 
where parent_object_id = object_id('mytable') 

一旦你得到你的结果集回来,你应该有列名和默认值。如果每个具有默认值的列与文本框对应(1:1),只需将一个Repeater添加到您的表单/网络表单并将“定义”绑定到Text属性。由于输出中添加了圆括号,您可能需要稍微修改一下数据,但可能使用正则表达式或简单的替换方法。

+0

chris-gessler - 所以,对于正常情况没有简单的解决方案,其中一些列没有默认值。 – Different111222

+0

@ Different111222 - 简单的解决方案是使用RIGHT JOIN –