2011-08-24 22 views
12

मेरे पास एक वेबग्रीड है और एक कॉलम है जो मैं केवल कुछ उपयोगकर्ताओं को दिखाना चाहता हूं। के रूप मेंएमवीसी 3 वेबग्रिड - आप उन कॉलम को कैसे छुपाते हैं जिन्हें आप दिखाना नहीं चाहते हैं?

if (Context.User.IsInRole(Role.Inputter) || Context.User.IsInRole(Role.Administrator)) 
{ 
    @grid.GetHtml(columns: grid.Columns(
     grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId })), 
     grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { contractId = item.ContractId })), 
     grid.Column("SignOffDate", "Sign Off Date", 
      format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>), 
     grid.Column("FullContractNumber", "Contract Number"), 
     grid.Column("ContractTitle", "Title") 
    )); 
} 
else 
{ 
    @grid.GetHtml(columns: grid.Columns(
     grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId })), 
     grid.Column("SignOffDate", "Sign Off Date", 
      format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>), 
     grid.Column("FullContractNumber", "Contract Number"), 
     grid.Column("ContractTitle", "Title") 
    )); 
} 

इस प्रकार वर्तमान में मैं ग्रिड कोड किया है लेकिन निश्चित रूप से सभी कि कोड को दोहराए बिना एक बेहतर तरीका है? 2 कॉलम इनपुट के बीच एकमात्र अंतर यह है कि मैं particlaur उपयोगकर्ताओं के लिए संपादन लिंक प्रदर्शित करना चाहता हूं। तो ऐसा करने का सबसे अच्छा वैकल्पिक तरीका क्या है?

उत्तर

25

इस तरह का प्रयास करें (अपरीक्षित, इस समय वी.एस. के लिए पहुँच नहीं है):

@{ 
    var gridColumns = new List<WebGridColumn>(); 
    gridColumns.Add(grid.Column(format: (item) => Html.ActionLink("Select", "Details", new { contractId = item.ContractId }))); 
    if (Context.User.IsInRole(Role.Inputter) || Context.User.IsInRole(Role.Administrator)) 
    { 
     gridColumns.Add(grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { contractId = item.ContractId }))); 
    } 
    gridColumns.Add(grid.Column("SignOffDate", "Sign Off Date", format: @<text> <span>@item.SignOffDate.ToString("d/M/yyyy")</span></text>)); 
    gridColumns.Add(grid.Column("FullContractNumber", "Contract Number")); 
    gridColumns.Add(grid.Column("ContractTitle", "Title")); 
} 

@grid.GetHtml(columns: grid.Columns(gridColumns.ToArray())); 
+2

वाह ... महान समाधान डैरिन से लिया। उम्मीद के रूप में काम करना। –

1
grid.Column("FriendlyId", style:"hidecol",header:"") 

इस प्रकार की यह का उपयोग करने का आप ढंग bellow में है जैसे कि यह प्रयोग करना चाहिए। मैंने कोशिश की है, यह सफलतापूर्वक काम करेगा।

grid.Column(format: @<input type="hidden" name="FriendlyId" value="@item.FriendlyId" />) 
0

यह सुनिश्चित नहीं है कि यह मुझे "कॉलम नाम" पैरामीटर का उपयोग करके इस तरह अधिक सरल बना सकता है। मैं "कस्टमरोड" कॉलम दिखाना चाहता था, इसलिए बस "कस्टमरोड" डालें, किसी भी अन्य कॉलम को बाहर रखा गया है।

WebGrid obj = new WebGrid(Custs,columnNames: new[] { "CustomerCode"}); 

http://www.codeproject.com/Articles/843788/WebGrid-in-ASP-NET-MVC-important-tips#Tip3:-DisplayNecessaryColumnsMVCWebGrid