【问题标题】:Is there a switch to get the default values of a SQL Server's table's fields as default values for TextBoxes of a FormView / DetailsView?是否有一个开关来获取 SQL Server 表字段的默认值作为 FormView / DetailsView 的 TextBoxes 的默认值?
【发布时间】:2012-05-12 12:01:00
【问题描述】:

我正在使用 SQL Server 2008 R2 和 VS2010 C# ASP.NET 4

FormView 和 DetailsView 在插入模式下为空的 TextBox。

我希望这些文本框能够反映 SQL Server 上各个列的默认值的默认值。

有简单的方法吗?


已编辑:(示例)

问题:

桌子:

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# 代码中没有任何内容。

【问题讨论】:

  • 它位于 information_schema 表中。我忘了是哪个

标签: c# asp.net sql-server


【解决方案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) 到一个文本框,只需将一个中继器添加到您的表单/网络表单并将“定义”绑定到文本属性。由于输出中添加了括号,您可能需要稍微处理一下数据,但可能是正则表达式或简单的替换就可以解决问题。

【讨论】:

  • chris-gessler - 因此,对于某些列没有默认值的正常情况,没有简单的解决方案。
  • @Different111222 - 简单的解决方案是使用 RIGHT JOIN
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 2014-10-24
  • 2014-08-18
  • 2014-07-25
  • 1970-01-01
  • 2016-03-22
相关资源
最近更新 更多