我有一些详细信息视图,我可以在其中添加一些数据到我的数据库。
详情视图的代码:
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
DataSourceID="orderSqlDataSource" DefaultMode="Insert" Height="50px"
Width="333px" DataKeyNames="ID" CellPadding="4" ForeColor="#333333"
GridLines="None" oniteminserted="DetailsView1_ItemInserted"
onprerender="DetailsView1_PreRender">
<CommandRowStyle BackColor="#E2DED6" Font-Bold="True" />
<EditRowStyle BackColor="#E9ECF1" />
<FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True" />
<Fields>
<asp:BoundField DataField="userid" HeaderText="Azonosító"
SortExpression="userid" ReadOnly="True" />
<asp:BoundField DataField="quantity" HeaderText="Mennyiség (kg)"
SortExpression="quantity" />
<asp:TemplateField HeaderText="Mit rendel" SortExpression="Mit rendel">
<InsertItemTemplate>
<asp:DropDownList ID="ordertypeDropDownList" runat="server"
DataSourceID="ordertypeDDLSqlDataSource" DataTextField="name"
DataSource='<%# Bind("ordertype") %>'
SelectedValue='<%# Bind("ordertype") %>'
DataValueField="ID">
</asp:DropDownList>
<asp:SqlDataSource ID="ordertypeDDLSqlDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:dotnetConnectionString %>"
SelectCommand="SELECT [name], [ID] FROM [product]"></asp:SqlDataSource>
</InsertItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowInsertButton="True" CancelText="Mégsem"
InsertText="Elküld" />
</Fields>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White"
HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
</asp:DetailsView>
以下是page_load事件背后的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (User.Identity.IsAuthenticated)
{
MembershipUser user = Membership.GetUser(User.Identity.Name);
string userID = user.ProviderUserKey.ToString();
((TextBox)DetailsView1.Rows[0].Cells[1].Controls[0]).Text = userID;
}
}
如您所见,我从page_load填充第一个boundfield。 问题是第一个boundfield(userid,或者我的母语“azonosító”)因数据库而很重要,但我不想让用户看到他/她的用户ID。 如果我隐藏了boundfield(可见= false),则无法使用page_load中的代码访问它。 当隐藏字段时,如何将当前用户ID绑定到该字段,或者如何在没有绑定字段的情况下获得此工作?
提前致谢!
答案 0 :(得分:4)
如果用户不需要知道您正在插入的值或与之交互,那么很容易将参数值注入DetailsView
发送给您的数据源控件的插入调用中。只需使用DetailsView.Inserting
事件DetailsViewInsertEventArgs
参数,如图所示。
代码:
protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
if (User.Identity.IsAuthenticated)
{
MembershipUser user = Membership.GetUser(User.Identity.Name);
string userID = user.ProviderUserKey.ToString();
e.Values.Add("userid", userID);
}
}
正如您所料,此方法完全不需要BoundField:)
答案 1 :(得分:2)
使用模板字段并放置标签并将其与userid绑定。您可以访问代码隐藏中的标签,而不管它是不可见的。
<asp:DetailsView runat="server" ID="dv" >
<Fields>
<asp:TemplateField Visible="false" >
<ItemTemplate>
<asp:Label ID="lb" runat="server" Text='<%# Bind("userid") %>' />
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
// In your code behind
string userid = ((Label)dv.Rows[0].FindControl("lb")).Text(); // give the correct index