我有一个小细节视图,我可以在其中向我的数据库添加一些数据。
详细信息视图的代码:
<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填充了第一个边界字段。问题是第一个边界字段(userid,或我的母语"azonosító")由于数据库而很重要,但我不想让用户看到他/她的userid。如果我隐藏边界字段(visible=false),则page_load中的代码将无法访问它。当字段被隐藏时,如何将当前用户 ID 绑定到该字段,或者如何在没有 ID 边界字段的情况下获得此工作?
提前感谢!
如果用户不需要知道要插入的值或与之交互,则很容易将参数值注入到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);
}
}
如您所料,此方法使边界字段完全没有必要:)
使用模板字段并放置标签并将其与用户标识绑定。您可以在代码隐藏中访问标签,无论它是否不可见。
<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