问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

几个C#编程的小技巧

发布网友 发布时间:2022-04-11 23:04

我来回答

3个回答

懂视网 时间:2022-04-12 03:25

1、提升权限执行的代码 SPSecurity.RunWithElevatedPrivileges(delegate() { // 需要提升权限执行的代码 }); 应用场景:当前用户可能没有权限执行的操作,但系统需要执行这段代码,这样如果不提升代码权限的话. 系统将会报出 拒绝访问错误. 用上述代码可以

1、提升权限执行的代码

SPSecurity.RunWithElevatedPrivileges(delegate()

{

// 需要提升权限执行的代码

});

应用场景:当前用户可能没有权限执行的操作,但系统需要执行这段代码,这样如果不提升代码权限的话.

系统将会报出 拒绝访问错误.

用上述代码可以将其所辖范围内的代码权限提升到最高.

建议:不到万不得以不要使用,因为滥用会把系统的权限搞混.

2、解决一个或多个域类型未正确安装。请转到列表设置页删除这些域

sharepoint列表内部字段的查看方法
SPQuery查询列表查不出结果,提示“一个或多个域类型未正确安装。请转到列表设置页删除这些域”。
原因:
查询的时候,字段名称需要输入字段的内部名称,而不是看到的那个名称
解决方法:
我写了段代码可以把字段以及对应的内部名称列出来,查一下就可以了。


protected void Button2_Click(object sender, EventArgs e)
{
SPWeb site = SPControl.GetContextWeb(Context);
SPListItemCollection items = site.Lists["测试列表1"].Items;
string tmpstr = "";
SPListItem item = items[0];

for (int i = 1; i < item.Fields.Count; i++)
{
tmpstr = tmpstr+item.Fields[i].ToString()+":" + item.Fields[i].InternalName.ToString()+"

";
}
tmpstr = tmpstr + "



";


Label1.Text = tmpstr;
}

3、解决代码引发 Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem 安全性驗證無效

在更新语句前 

    加上:

      myWeb.AllowUnsafeUpdates = true;//该代码表示允许代码更新

热心网友 时间:2022-04-12 00:33

一、最小化窗口
  点击“X”或“Alt F4”时,最小化窗口,如:

protected override void WndProc(ref Message m)
{
const int
WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (m.Msg ==
WM_SYSCOMMAND && (int) m.WParam == SC_CLOSE)
{
// User clicked
close button
this.WindowState =
FormWindowState.Minimized;
return;
}
base.WndProc(ref m);
}

  二、如何让Foreach 循环运行的更快

  foreach是一个对集合中的元素进行简单的枚举及处理的现成语句,用法如下例所示:

using System;
using System.Collections;
namespace
LoopTest
{
class Class1
{
static void Main(string[] args)
{
//
create an ArrayList of strings
ArrayList array = new
ArrayList();
array.Add("Marty");
array.Add("Bill");
array.Add("George");
//
print the value of every item
foreach (string item in
array)
{
Console.WriteLine(item);
}
}
}

  你可以将foreach语句用在每个实现了Ienumerable接口的集合里。如果想了解更多foreach的用法,你可以查看.NET Framework
SDK文档中的C# Language Specification。

  在编译的时候,C#编辑器会对每一个foreach 区域进行转换。

IEnumerator enumerator = array.GetEnumerator();
try
{
string
item;
while (enumerator.MoveNext())
{
item = (string)
enumerator.Current;
Console.WriteLine(item);
}
}
finally

{
IDisposable d = enumerator as IDisposable;
if (d != null)
d.Dispose();
}

  这说明在后台,foreach的管理会给你的程序带来一些增加系统开销的额外代码。

  三、将图片保存到一个XML文件

  WinForm的资源文件中,将PictureBox的Image属性等非文字内容都转变成文本保存,这是通过序列化(Serialization)实现的,

例子://

using System.Runtime.Serialization.Formatters.Soap;
Stream stream = new
FileStream("E://Image.xml",FileMode.Create,FileAccess.Write,FileShare.None);
SoapFormatter
f = new SoapFormatter();
Image img =
Image.FromFile("E://Image.bmp");
f.Serialize(stream,img);
stream.Close();

  四、屏蔽CTRL-V

  在WinForm中的TextBox控件没有办法屏蔽CTRL-V的剪贴板粘贴动作,如果需要一个输入框,但是不希望用户粘贴剪贴板的内容,可以改用RichTextBox控件,并且在KeyDown中屏蔽掉CTRL-V键,例子:

private void richTextBox1_KeyDown(object sender,
System.Windows.Forms.KeyEventArgs e)
{
if(e.Control &&
e.KeyCode==Keys.V)
e.Handled = true;
}

ps: 网上摘抄,看了以后感觉不错,以后碰见好的再陆续发布

Tags: dotnet技术 , c#开发技术
ASP.NET 2.0中使用webpart系列控件

Dot-Net技术 | 阅读(144) | 评论(0)

Oct
29
2005
[此文来源于互联网,牛C网只负责收集整理]

  在现在的网站设计中,更强调的是用户的个性化设置,让用户可以自由的设置符合自己喜好的页面成为网站开发人员的头号难题,不过现在看来这个难题微软帮我们解决了。在asp.net
2.0中新增加了一系列webpart控件,可以让用户很方便地对网页的各区域布局进行调整。在一些web应用程序中,如果用户想自定义页面布局,比如一个新闻发布系统,想让左,中,右三栏的位置进行调换的话,就可以使用webpart控件。

  下面,我们来看下asp.net 2.0中webpart系列控件的一些基本用法。

  首先,在vs.net 2005 中的工具箱中,可以找到如下图所示的webpart系列控件,有很多个,限于篇幅,本文介绍其中的一些重要的控件:

 

  在webpart系列控件中,其中的webpartmanager控件用于统一管理各webpart控件。而webpartzone控件,则是提供了各区域划分,在这些区域中,用户可以往里面放置各式各样的控件,而当运行的时候,用户可以移动的就是这些webpartzone控件所在的区域。

  为增强认识,我们先做个简单的例子。

  1、首先使用vs.net 2005 beta 2(或者RC1)新建一个web站点,

  2、往窗体中拖拉一个webpartmanager控件,再建一个3列1行的表格,分别往每个单元格里拖拉一个webpartzone控件,如下图:

   
  3、往webpartzone1中拖拉放一个日历控件,并为这个日历控件选择一个合适的样式

  4、切换到代码视图状态,将日历控件的title属性改为:today’s
date。注意的是,日历控件本身没有title属性,但当一个控件加入到webpartzone区域中去后,则该控件被自动包装为GenericWebPart类型控件,这些类型的控件有title属性。

  5、这时,我们可以按F5来运行该程序,运行如下图所示,可以看到,区域的右上角有最小化和关闭,恢复的按钮。
  

  接下来,我们介绍如何在webpart系列控件中,使用用户自定义的控件。

  1、首先,我们为工程项目增加一个"google.ascx"的控件,并且在images目录下,添加google那张著名的logo图片。

  接着,往窗体中添加一个2*2行的表格,再往其中的一个单元格添加一个image图象控件,指定其图象为google.gif,再添加一个文本框,一个按钮,如下图所示,其中,括号内的是该控件的名称: 

  3、在btnsearch按钮的click事件中写入如下代码:

 Response.Write(Page.IsValid)
 Dim queryStr As String =
HttpUtility.UrlEncode(txtSearch.Text)
 Response.Redirect("http://www.google.com/search?q=" &
queryStr)
End Sub

  4、这时,将写好的google.ascx控件,整个拖拉到我们刚才建立好的表格中的中间那个单元格,如下图所示:
  

  
  我们并且修改代码如下,修改其名称为google serach:

<uc1:Google title="Google Search" runat="server" ID="Google1" />

  接下来,F5运行,可以看到,可以在googlesearch所在的webpart里进行google搜索了。

  同时,如果觉得webpart的那些关闭,恢复,最小化的按钮不大好看,还可以自定义按钮,比如在images目录下,添加下面的图片:

  
  然后,在webpartzone1的属性中,指定如下的属性就可以了。 

CloseVerb.ImageUrl="Images/CloseVerb.gif"
EditVerb.ImageUrl="Images/EditVerb.gif"
MinimizeVerb.ImageUrl="Images/MinimizeVerb.gif"

RestoreVerb.ImageUrl="Images/RestoreVerb.gif"
  使webpart动起来

  上面设计的webpart还没能动起来,要让webpart动起来的话,必须要将webpar设置为design display
模式。先为webpart添加下面的radiobutton选择框

<asp:RadioButtonList ID="rblMode" runat="server"
AutoPostBack="True">
 <asp:ListItem>Browse Display
Mode</asp:ListItem>
 <asp:ListItem>Design Display
Mode</asp:ListItem>
</asp:RadioButtonList>

  并且在code-behind的代码中,写入如下代码:

Protected Sub RadioButtonList1_SelectedIndexChanged(ByVal sender As
Object, _ ByVal e As System.EventArgs) _ Handles
rblMode.SelectedIndexChanged
 Select Case rblMode.SelectedIndex
  Case 0 :
WebPartManager1.DisplayMode =WebPartManager.BrowseDisplayMode
  Case 1 :
WebPartManager1.DisplayMode = WebPartManager.DesignDisplayMode
 End
Select
End Sub 

  运行上面代码,选择design display mode,则可以象下图那样,自由拖动webpart,

  要注意的是,当移动各webpart的位置后,即使关掉浏览器,下次重新打开时,依然可以看到各个控件保持原来的位置。其实,asp.net
2.0是使用在aspnetdb.mdf中的一个叫aspnet_PersonalizationPerUser的表来保存数据的,表的结构如下所示:
   
Field
Value
Id 928e121a-4042-4fb4-9520-21210b9b37c1
PathId
7c3b5dc0-04d0-48a2-bbb2-2b70286f22fe
UserId
9bff14df-024f-4bda-9a0a-b4a19ab9e387
PageSettings <Binary data>

LastUpdatedDate 10/06/2005 4:44:05 AM

  如果想恢复各控件的原来位置,只需要将该数据表中相应的行删除掉就可以了。但有个问题是,如果使用每一个webpart的关闭按钮,则很难再将其恢复(当然删除数据表中的行,但十分麻烦)。在asp.net
2.0中,提供了另一种webpart,叫做catlogzone控件,下面介绍其用法:

  1、往窗体中拖拉一个catlogzone控件,如下图所视。

  2、往该catlogzone控件区域中,再拖放三个webpart系列的控件,分别是DeclarativeCatalogPart,
PageCatalogPart, and
ImportCatalogPart,如下图所示。其中,DeclarativeCatalogPart控件的作用是,显示目前页面上有哪些可以用的webpart控件;PageCatalogPart的作用是,可以让用户通过勾选的方式,选定将哪些控件添加转移到其他webpart区域中去。ImportCatalogPart则可以通过外部磁盘文件的方式,加载其他做好了的webpart部件。

  3、在radiobutton区域中,修改以下代码,增添一个catalog display的显示模式:

<asp:RadioButtonList ID="rblMode" runat="server"
AutoPostBack="True">
<asp:ListItem>Browse Display
Mode</asp:ListItem>
<asp:ListItem>Design Display
Mode</asp:ListItem>
<asp:ListItem>Catalog Display
Mode</asp:ListItem>
</asp:RadioButtonList>

  然后,在code-behind的代码中,将代码修改为如下:

Protected Sub rblMode_SelectedIndexChanged( _
 ByVal sender As Object,
_
 ByVal e As System.EventArgs) _
 Handles
rblMode.SelectedIndexChanged
  Select Case rblMode.SelectedIndex
   Case 0
: WebPartManager1.DisplayMode = WebPartManager.BrowseDisplayMode
   Case 1 :
WebPartManager1.DisplayMode = WebPartManager.DesignDisplayMode
   Case 2 :
WebPartManager1.DisplayMode = WebPartManager.CatalogDisplayMode
  End
Select
End Sub

  4、在DeclarativeCatalogPart任务菜单上,点击右上角的智能感知按钮,然后选"edit
templates"的链接,进入模版编辑状态,如下图:

  再往其中的webpartstemplate区域中拖拉一个google.ascx控件,如下图,这将允许用户在运行时,可以自由地往页面增加这样的google搜索控件。

  5、然后修改代码如下:

<ZoneTemplate>
<asp:DeclarativeCatalogPart
ID="DeclarativeCatalogPart1"
runat="server">
 <WebPartsTemplate>
  <uc1:Google title="Google Search"
ID="Google2" runat="server"
/>
 </WebPartsTemplate>
</asp:DeclarativeCatalogPart>

  6、运行程序,可以看到,当选择catalog display mode时,会显示如下图所示的catalog
zone,其中列出了当前可用的有哪些webpart控件,我们可以把这个google的控件加到其他的webpart区域,也可以尝试将已经存在的webpart控件关闭,然后在catalog
zone区域中的控件列表中,把它们再加回到页面中去。

  此外,在运行期间,还可以动态地修改webpart控件的外观等属性,如下:

  1) 往窗体中添加一个editor
zone的区域控件,往其中再拖放一个appearanceEdiotrPart控件,该控件可以在运行时,让用户动态改变各webpart控件的属性。

  2) 我们再修改radiobutton选择框的代码如下,则加一个编辑模式:

<asp:RadioButtonList ID="rblMode" runat="server"
AutoPostBack="True">
<asp:ListItem>Browse Display
Mode</asp:ListItem>
<asp:ListItem>Design Display
Mode</asp:ListItem>
<asp:ListItem>Catalog Display
Mode</asp:ListItem>
<asp:ListItem>Edit Display
Mode</asp:ListItem>
</asp:RadioButtonList>

  3) 修改code-behind代码如下:

Protected Sub rblMode_SelectedIndexChanged(ByVal sender As Object, ByVal
e As System.EventArgs) _
Handles rblMode.SelectedIndexChanged
 Select Case
rblMode.SelectedIndex
  Case 0 : WebPartManager1.DisplayMode =
WebPartManager.BrowseDisplayMode
  Case 1 : WebPartManager1.DisplayMode =
WebPartManager.DesignDisplayMode
  Case 2 : WebPartManager1.DisplayMode =
WebPartManager.CatalogDisplayMode
  Case 3 : WebPartManager1.DisplayMode =
WebPartManager.EditDisplayMode
 End Select
End Sub

  4) 运行程序,选择edit display
mode模式,这时,会发现每个控件的右上角,会多了一个"edit"的按钮,点该按钮,弹出如下图的窗体,用户可以修改每个控件的外观等属性。

  最后,我们看下,webpart控件之间还可以进行相互之间的通信,下面的例子中,要实现的是,在一个日历控件中点选某一个日期,会在已经做好的googlesearch的webpart控件的文本框中显示其日期,达到通信的目的,下面介绍其实现步骤:

  1、为了使两个webpart控件之间进行通信,必须先声明一个公共的接口。往工程项目里增加一个叫ISelectedDate.vb的类文件,放在app_code目录下,写入如下代码:

Imports Microsoft.VisualBasic
 Public Interface
ISelectedDate
 ReadOnly Property SelectedDate( ) As Date
End Interface

  这里,我们返回一个只读的日期属性selectedDate.

  2、再创建一个日历控件CalendarUC.ascx,其中拖拉一个普通的日历控件即可。然后写入如下代码:

Partial Class CalendarUC_ascx
Inherits
System.Web.UI.UserControl
Implements ISelectedDate

Public ReadOnly Property SelectedDate( ) As Date Implements
ISelectedDate.SelectedDate
 Get
  Return
Calendar1.SelectedDate.Date
 End Get
End Property

<ConnectionProvider("SelectedDate", "SelectedDate")> _
Public Function
GetSelectedDate( ) As ISelectedDate
 Return Me
End Function
End
Class

  上面的代码,首先实现了已经声明了的IselectedDate接口,要留意的是<ConnectionProvider("SelectedDate",
"SelectedDate")>中的写法。由于在这个例子中,日历控件要为其他的控件提供信息,因此,该日历控件是一个provider(提供者),而另外的接收信息的控件,是consumer(消费者)。而两者为了要通信,必须要提供一个通信接入点,就象一个电插头,要找到合适的电插板一样。因此,<ConnectionProvider("SelectedDate",
"SelectedDate")>中的第一个参数,定义了两者的接口点,第二个参数,则是要传递给consumer的参数,本例是selectedDate。

  3、接下来,我们在已经做好的google.ascx控件的代码中,编写如下代码:

Private _selectedDate As ISelectedDate

<ConnectionConsumer("SelectedDate", "SelectedDate")> _
Sub
setSearchText(ByVal SearchText As ISelectedDate)
 Me._selectedDate =
SearchText
End Sub

Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.PreRender
 If _selectedDate IsNot Nothing
Then
  txtSearch.Text = _selectedDate.SelectedDate.ToShortDateString
 End
If
End Sub

  可以看到 <ConnectionConsumer("SelectedDate",
"SelectedDate")>的定义必须和provider中的定义一样。

  4、再修改如下代码,将两个控件的命名变得通俗易懂

<ZoneTemplate>
 <uc1:Google title="Google Search" runat="server"
ID="Google1" />
 <uc3:CalendarUC title="Calendar Web Part" runat="server"
ID="CalendarUC1" />
</ZoneTemplate>

  5、最后,为了使两者能互相通信,必须在default.aspx页中修改如下代码:

<asp:WebPartManager ID="WebPartManager1"
runat="server">
<StaticConnections>
<asp:WebPartConnection ID="Connection"

ProviderID="CalendarUC1"
ProviderConnectionPointID="SelectedDate"

ConsumerID="Google1"
ConsumerConnectionPointID="SelectedDate"
/>
</StaticConnections>
</asp:WebPartManager>

  6、在页面代码中,增加一个radiobutton,用作显示connection模式,并写入如下代码:

Case 4 : WebPartManager1.DisplayMode =
WebPartManager.ConnectDisplayMode

  7、运行程序,选择connect displaymode模式。再选择GOOGLE
SEARCH的那个webpart控件,点右上角的"conenct"按钮,此时,会显示如下图所示,提示你要选择从那个控件中得到信息,这里选择日历控件,按确定。那么,当点选日历控件的某个日期值的时候,GOOGLE
SEARCH的那个文本框里,就会显示相应的日期了。

热心网友 时间:2022-04-12 01:51

主要方法
参数地址传递
有点时候需要对两个参数操作,这样用返回值实现其来就复杂了。要明白引用传递,对于值类型来说:修饰符ref修饰。
参数个数方法
在写方法时,有时常为参数个数发愁。例如有的参数希望如果调用传值了就用所串的值,如果没有传值就不处理它。这里有道一个修饰符 params。如果个数不确定就用数组
params int[]number
循环比较思想
想找出一个集合中的之最,就用循环比较法,例如找一个数组中的最大值。这种编程思想可以应用的很多,要发散思维。
?private static int GetMax(int[] arr)

{

int max = arr[0];

for (int i = 0; i< arr.Length; i++)

{

if (max < arr[i])

{

max = arr[i];

}

}

return max;

}
保留小数位问题
有客户需求要保留两位小数,可是有的恰好就一位小数怎么办。这里用到format方法。string numStr = string.Format("{0:0.00}",2.3);
字符串处理
查找字符串中的字符
IndexOf(keyWord,index)返回值是字符所在索引,index 开始查询位置,keyWord是要查找的字符。
字符串切割与拼接方法

?

1、Split(new char[]{ ' ' }, StringSplitOptions.RemoveEmptyEntries);
这是按照空格切成字符串数组,要注意后面的参数表示去掉空字符串。
2、string.Join(" ", text);拼接字符串 以空格连接字符串数组中元素
3、将字符串转化成字符数组 ToCharArray()
索引器的编写
有的一些对象可以像调用数组那样调用,例如person[0]。其实这是应为有“索引器”
public string this[int index]

{

get { returnNames[index]; }

set { Names[index] = value;}

}
反向排序
反向拍序思想,以简单的数组为例。
1总结
这节没有将太多新知识,都是写小知识点。关于一些思想也是特简单的,但是要明白它们不止可以用于数组。也可以用于集合,比较对象的某个字段。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
amd锐龙r75700g超频性价比装机方案,要核显性能综合表现超 架空电线故障如何排除 ...unexpected T_CONSTANT_ENCAPSED_STRING in 怎么解决这个错啊_百度... php错误Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_S... PHP出现如下情况 syntax error, unexpected T_ENCAPSED_AND_WHITES... php 如何捕获类似于Parse error: syntax error, unexpected T_CONSTA... 挂烫机如何熨西装 戗驳领西装怎么熨烫 西装前片怎么推拉拔烫 西装能不能拿去烫 moss2007 还原,急求MOSS高手 MicrosoftOfficeSharePointServer2007案例实战开发的专家推荐 MicrosoftOfficeSharePointServer2007案例实战开发的前 言 数据库连接字符串的账户密码无法被识别,怎样解决? 数据库中的连接字符是什么意思 啊,有什么用 C# 数据库 连接字符串中本来就有双引号怎么办 数据库备份文件的定期删除 帮忙写个批处理:按日期备份多个文件夹,并删除2个月前备份文件 数据库自动备份,文件在是不是在什么时间段都可以被删除 你好,备份保存周期30天,是不是30天过后就自动删除所有的文件? 有什么快捷的方法转移数据库的吗? Java怎么做到把图片转换成流存入数据库,然后怎么再把图片显示出来。 java数据库中blob字段插入图片的问题 pb读取oracle大字段blob实现下载功能,已经将图片等上传到blob中储存,现在要从数据库中把图片下载过来 JAVA怎么把图片从数据库中调用出来 如何将图片直接存入数据库(字段类型 blob) 怎样将保存在数据库中BLOB类型的图片输出到浏览器上? msf里怎么添加db_del_host命令 termux运行msfconsole时变成这样,怎么解决 关于metasploit framework 3.5.1 无法链接database的问题 讨论一个PLC编程技巧。 中文版Excel2007高级VBA编程宝典的编辑推荐 在C语言编程中都有哪些技巧呢??? 三菱PLC的一点多送指令FMOV的编程技巧介绍 三菱机床数控编程技巧 moss中如何在页面中直接显示xls中的内容? 我该怎么办!专精什么好!!望专业IT人士解惑!PHP、C#&#47;.NET、MOSS(MS Office SharePoint Server)的选择。 数控车床的编程技巧 局域网内如何访问另一台机器的SQL Server 2000是数据库,说的具体一点。 请问局域网内怎么访问另一台服务器上的SQlserver数据库? 关于sql server 跨网段访问的问题 ASP数据库连接 函数Function OpenConnect()求讲解 怎么让asp和数据库连接 asp中怎么连接sql数据库哦?拜托了各位 谢谢 asp 数据库连接 asp文件如何连接数据库 asp 数据库连接池怎么做? 关于asp网页 的数据库连接? 急!下面是ASP中连接数据库的代码,能不能逐句帮解释一下!谢谢啦!关键行一定帮忙解释一下! ASP数据库读取和函数 (回答正确加分50)